기본적으로 나는 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
입니다. 이 출력해야 내 암호화 된 문자열을 해독 할 때 당신이 볼 수 있듯이 여기가 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"
에서 붙여 넣기 다음은 "안녕하세요, 세계!"나는 10하지 마십시오의 회전과 함께, 그것을 암호화 무엇 내가 여기서 잘못하고있는 것을 보아라, 어떤 도움이라도 인정 될 것이다.
그것은 확실히 내 decrypt_letter 기능에 문제가 있습니다. 다음은 몇 가지의 IRB 디버깅 후에 다음 확인 ('&', 13) => e.encrypt_letter ('t', 13) => "&" > e.decrypt_letter "3" –
거기인가 내 '.to_a.reverse.to_h'방법보다 나은 방법? –
나는 당신의 코드를 자세히 보아본 적이 없다는 것을 인정하지만, 해독 방법과 암호화 방법이 다르게 보인다는 사실은 나를위한 적기 다. (실제로 두 가지 방법을 사용하는 경우조차도 의심 스럽습니다.) 코드에서 이해할 수있는 것부터 Caesar Cipher를 구현하고 Caesar Cipher는 완전히 대칭입니다. 암호화 및 암호 해독은 정확히 똑같습니다. 다른 키들로. 두 가지 방법을 사용할 수 없습니다. 암호화와 암호 해독에 두 가지 다른 방법이 없어야합니다. 두 가지 방법이 완전히 동일하기 때문입니다. –