私は基本的にJumpstartのラボのチャレンジEncryptorプログラムに従っており、いくつかの問題を抱えています。基本ローテーションベースの暗号化/復号化の問題
は、ここで私は私の復号化方法で問題に実行している私のコード
class Encryptor
def cipher(rotation)
characters = (' '..'z').to_a
rotated_characters = characters.rotate(rotation)
Hash[characters.zip(rotated_characters)]
end
def encrypt_letter(letter, rotation)
cipher_for_rotation = cipher(rotation)
cipher_for_rotation[letter]
end
def encrypt(string, rotation)
letters = string.split("")
results = letters.collect do |letter|
encrypt_letter = encrypt_letter(letter, rotation)
end
results.join
end
def decrypt_letter(letter, rotation)
cipher_for_rotation = cipher(rotation)
reversed_cipher = cipher_for_rotation.to_a.reverse.to_h
reversed_cipher[letter]
end
def decrypt(string, rotation)
letters = string.split("")
results = letters.collect do |letter|
decrypt_letter = decrypt_letter(letter, rotation)
end
results.join
end
end
です。私の暗号化された文字列を復号化するときに、見ることができるようにここでは、次のは、「こんにちは、世界を!」を出力する必要があり、私はそれを暗号化されたものを、10の回転にIRB
2.3.0 :001 > load './encryptor.rb'
=> true
2.3.0 :002 > e = Encryptor.new
=> #<Encryptor:0x007fe93a0319b8>
2.3.0 :003 > encrypted = e.encrypt("Hello, World!", 10)
=> "Rovvy6*ay!vn+"
2.3.0 :004 > e.decrypt(encrypted, 10)
=> "\\y%%(@4k(+%x5"
から貼り付けられないでください私がここで間違っていることを見て、どんな助けも認められるでしょう。
それは間違いなく私のdecrypt_letter機能の問題です。いくつかのIRBでのデバッグの後に、次のチェックアウト:( '&'、13) => e.encrypt_letter( 'T'、13) => "&" > e.decrypt_letter "3" –
があります私の'to_a.reverse.to_h 'メソッドよりも優れた方法ですか? –
私はあなたのコードを深く見ていないことは認めていますが、復号化と暗号化の方法が異なって見えるという事実は、私にとっては赤旗です。 (実際には、2つの方法があっても疑わしいという事実もあります。)私があなたのコードを理解できることから、シーザー暗号を実装しています。シーザー暗号は完全に対称です。暗号化と復号化はまったく同じことです。ちょうど異なるキーで。 2つのメソッドがあるべきではなく、暗号化と復号化の2つの異なるメソッドであってはなりません。 –