0

我正在通过旧考试,我的期末考试将在几天后完成。我想解密一个密文,它首先由 vigenere 加密,然后由 columna 转置加密。如何解密以获取原始消息?

message -> rgyqhbmnwaazxcajittuzqyagkx
vigenere key -> final
columnar transposition key -> exam

我花了几个小时在这上面,但没有得到任何东西。我首先想通过柱状解密,然后是 Vigenere。我认为输出应该看起来是英语,但我只是越来越垃圾。我的vigenere代码在下面,我想问题出在柱状上,我遇到的所有代码都以数字为键,但我有一个字母键。

def decrypt(message, password):
    decrypted = ''
    for i in range(0, len(message)):
        letter = ord(message[i]) - ord(password[i%len(password)]) + 65
        if letter < 65:
            letter += 26
        decrypted += chr(letter)
    return decrypted

谢谢

4

1 回答 1

0

柱状换位确实以单词为键,而不是数字。如果“考试”是关键,那么你从左边写出消息以四行写入,然后从上到下读取密文,从第 3 列开始,然后是第 1 列,然后是第 4 列,然后是第 2 列。顺序来自字母“e”、“x”、“a”、“m”的字母顺序:“2nd”、“4th”、“1st”、“3rd”。

例如,要加密“这是消息”:

E  X  A  M
----------
T  H  I  S
I  S  T  H
E  M  E  S  
S  A  G  E

--> ITEG TIES SHSE HSMA

即,“ITEGTIESSSHSEHSMA”。

解密做相反的事情。我不想为你解决你的作业,但我会说,当你通过“exam”的柱状转置正确解密时,你会发现一个以“nzrawq...”开头的字符串

然后,当您使用 vigenere 密码进一步解密该字符串时,您确实会找到英文单词,特别是以“ireallywant...”开头的字符串

于 2015-05-13T05:23:47.217 回答