2017-02-21 4 views
0

私は基本的に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" 

から貼り付けられないでください私がここで間違っていることを見て、どんな助けも認められるでしょう。

+0

それは間違いなく私のdecrypt_letter機能の問題です。いくつかのIRBでのデバッグの後に、次のチェックアウト:( '&'、13) => e.encrypt_letter( 'T'、13) => "&" > e.decrypt_letter "3" –

+0

があります私の'to_a.reverse.to_h 'メソッドよりも優れた方法ですか? –

+0

私はあなたのコードを深く見ていないことは認めていますが、復号化と暗号化の方法が異なって見えるという事実は、私にとっては赤旗です。 (実際には、2つの方法があっても疑わしいという事実もあります。)私があなたのコードを理解できることから、シーザー暗号を実装しています。シーザー暗号は完全に対称です。暗号化と復号化はまったく同じことです。ちょうど異なるキーで。 2つのメソッドがあるべきではなく、暗号化と復号化の2つの異なるメソッドであってはなりません。 –

答えて

0

ハッシュのキーを検索するだけでよいでしょう。

def decrypt_letter(letter, rotation) 
    cipher_for_rotation = cipher(rotation) 
    cipher_for_rotation.key(letter) 
end 

例:

irb(main):003:0> e = Encryptor.new 
=> #<Encryptor:0x007fbcea9b65c8> 
irb(main):004:0> enc = e.encrypt "Hello, World!", 10 
=> "Rovvy6*ay!vn+" 
irb(main):005:0> e.decrypt enc, 10 
=> "Hello, World!" 
+0

これは正確に私が探していたかもしれない、入力のおかげで。はい、これは完全に機能します。本当にありがとう –