破解修改后的 Vigenere 密码

Posted

技术标签:

【中文标题】破解修改后的 Vigenere 密码【英文标题】:Breaking a Modified Vigenere Cipher 【发布时间】:2012-12-01 11:12:34 【问题描述】:

我正在研究的算法。常规的 Vigenere 密码的工作方式如下:

Plaintext: ATTACKATDAWN
Key: LEMONLEMONLE
Ciphertext: LXFOPVEFRNHR

普通版

CR[i] = (P[i] - 33 + K[i]) mod 94 + 33

修改版

CM[i] = (P[i] - 33 + K[i] + CM[i-1] - 33) mod 94 + 33

注意修改后的版本如何使用以前的状态/字符来生成新的。我打破它的理论是将修改后的版本反转回常规的 Vigenere 密码。这样我可以应用一些频率分析和其他方法。我需要以某种方式重新排列该等式,以便在 LHS 上使用 C 具有“previousC”。由于 C 和 previousC 都是已知值,因此应该很容易进行反转(从第一个字符开始) .

我唯一的问题是,如何用 C 和 previousC 重写方程?如果有人能指出这一点,那将有很大帮助。

【问题讨论】:

【参考方案1】:

CR表示常规的Viginere密文,CM表示修改后的Viginere密文

CR[i] = (P[i] + K[i]) mod 26
CM[i] = (P[i] + K[i] + CM[i-1]) mod 26
      = (CR[i] + CM[i-1]) mod 26

现在简单解出原始密文CR

CR[i] = (CM[i] - CM[i-1]) mod 26

一旦你有了常规密文,就照常破解它。

【讨论】:

我只是试图实现这一点,但似乎又被卡住了。我将公式从简单版本更新为真实版本(带有偏移量),因为我的语言从字符“!”开始。并以“~”结尾。你能告诉我这个 CR[i] 解决方案吗?

以上是关于破解修改后的 Vigenere 密码的主要内容,如果未能解决你的问题,请参考以下文章

使用修改后的 Vigenere 密码算法,解密不会导致原始输入 [关闭]

维热内密码解密

NOIP 2012 题解

Go 语言入门很简单:实现 Vigenere 加密算法

Python:解码使用仿射密码编码的 Vigenere 密码

一本通1402 Vigenère密码