diff --git a/encrypt.rb b/encrypt.rb new file mode 100644 index 0000000..ad64bcc --- /dev/null +++ b/encrypt.rb @@ -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" diff --git a/encryption_engine.rb b/encryption_engine.rb new file mode 100644 index 0000000..b015b48 --- /dev/null +++ b/encryption_engine.rb @@ -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 diff --git a/test/encryption_engine_test.rb b/test/encryption_engine_test.rb new file mode 100644 index 0000000..2e191dd --- /dev/null +++ b/test/encryption_engine_test.rb @@ -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