如何解密列式换位ciph

2024-10-01 00:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题不是对每一个say进行编码,而是对算法的理解。

从概念上讲,我理解列转置是如何用常量键值(例如10)来破译文本的。

当键是一个排列时,我的困惑就出现了。例如key = [2,4,6,8,10,1,3,5,7,9]和类似"XOV EK HLYR NUCO HEEEWADCRETL CEEOACT KD"的消息。我感到困惑的地方是将密文写入行,然后根据密钥对行进行置换。

有人能解释一下吗。


Tags: key文本算法概念编码键值say常量
2条回答

本质上,密钥变成了密码中每个x个字母的顺序,x是密钥的长度。在您的示例中,键的长度是10,因此您将按照它们对应的顺序号排列前10个字母。在

这就是解释,下面是我写的一些代码,用密钥将密码按正确的顺序排列:

import math

moves = [2,4,6,8,10,1,3,5,7,9]
msg = "XOV EK HLYR NUCO HEEEWADCRETL CEEOACT KD"

decrypted = list(msg)

for i, letter in enumerate(msg):
    moves_index = i % len(moves)

    index = (math.floor(i / len(moves)) * len(moves)) + moves[moves_index]

    decrypted[index - 1] = letter

    print(str.format('{}, at index {}, goes in destination index {} (letter number {})', letter, i, index - 1, index))

print(''.join(decrypted))

这将打印出每个步骤,以便您可以根据手动操作进行验证:

^{pr2}$

然而,这最后打印的是:KX OHVL YEOR HNEUECREEWTALD CCCTE EKODA,它与您提出的解决方案不匹配:execlent work you have cracked the code(显然忽略大小写)。不确定是什么不符。。。在

我想出来了。一旦知道行数和列数,就可以将密文写入行中,然后根据键对行进行排列。如果我的解释有误,请改正。明文是“你破解了密码的可恶作品”

相关问题 更多 >