Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions encrypt.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# def encrypted_message(message, key)
# message_splitted = message.split("")
# message_splitted.map! do |letter|
# new_number = letter.ord + key
# new_number.chr
# end
# message_splitted.join
# end

require_relative 'encryption_engine'

key = 13
message = "This is my secret"

# do your encryption here

# puts encrypted_message(message, key)

engine = EncryptionEngine.new
output = engine.encrypt(message, key)
puts output # outputs "Zl Zrffntr"
output2 = engine.decrypt(output, key)
puts output2 # outputs "My Message"
36 changes: 36 additions & 0 deletions encryption_engine.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class EncryptionEngine

def encrypt(string, key)
message_splitted = string.split("")
result = message_splitted.map do |letter|
new_number = letter.ord + key
# if rotation of ascii number is greater than (Z|z).ord : -26 (back to (A|a))
new_number -= 26 if letter.ord + key > max_AZ(letter)
# keep space and punctuation unchanged
new_number = letter.ord if /\W+/.match(letter)
new_number.chr
end
result.join
end

# max_AZ refer to "Z".ord if letter is capitalized, "z" if not
def max_AZ(letter)
if letter.ord >= 65 && letter.ord <= 90
return 90
else
return 122
end
end

def decrypt(string, key)
message_splitted = string.split("")
result = message_splitted.map do |letter|
new_number = letter.ord - key
new_number += 26 if letter.ord - key < max_AZ(letter) - 26
new_number = letter.ord if /\W+/.match(letter)
new_number.chr
end
result.join
end

end
16 changes: 16 additions & 0 deletions test/encryption_engine_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require 'minitest/autorun'
require_relative '../encryption_engine'

class EncryptionEngineTest < Minitest::Test
def test_it_encrypts_using_rot13
engine = EncryptionEngine.new
output = engine.encrypt("My Message", 13)
assert_equal "Zl Zrffntr", output
end

def test_it_decrypts_using_rot13
engine = EncryptionEngine.new
output = engine.decrypt("Guvf vf zl frperg", 13)
assert_equal "This is my secret", output
end
end