В основном я следую за программой Encryptor для лаборатории Labs Jumpstart и столкнулся с некоторыми проблемами.Основные проблемы с шифрованием/расшифровкой на основе ротации
Вот мой код
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"
Как вы можете видеть, когда дешифрование моей зашифрованной строки следует выводить «Hello, World!», Что я зашифрован его с вращением 10. Не посмотрите, что я делаю неправильно здесь, любая помощь будет оценена по достоинству.
Это, безусловно, проблема с моей функции decrypt_letter. Проверьте следующее после некоторой отладки в IRB: e.encrypt_letter ('т', 13) => "и" > e.decrypt_letter ('&', 13) => "3" –
Есть лучший метод, чем мой метод .to_a.reverse.to_h? –
Я признаю, что я не смотрел глубоко на ваш код, но тот факт, что ваши методы расшифровки и шифрования выглядят по-другому, - это красный флаг для меня. (Фактически, факт, что у вас даже есть два метода вообще, является подозрительным.) Из чего я могу понять ваш код, вы реализуете Цезарский шифр, а Цезарский шифр полностью симметричен: шифрование и дешифрование - это точно одно и то же, просто с разными ключами. Не должно быть двух методов, и * конечно * не должно быть двух разных * методов для шифрования и дешифрования, поскольку оба они точно такие же. –