5

众所周知,可以逆转 MT 回火功能。可在此处在线获取源代码来执行此操作。我试图弄清楚这是如何工作的,以及我将如何以编程方式解决这个问题和类似问题。

我正在努力解决的是对有限大小变量的移位操作会导致不可逆转的数据丢失。同样,按位与运算也应该导致永久数据丢失,但提供的示例代码可以将任何值反转为其原始预调节状态!

另一件事是我感到困惑的是,非临时移位操作与临时函数的方向和数量相同。

4

1 回答 1

6

考虑Feistel 网络的结构。基本操作原理是将数据分成两部分,并将一部分哈希成掩码以异或到另一部分。即使哈希本身不可逆,这也是可逆的。在解密期间,使用相同的(可能具有破坏性的)哈希操作来生成与之前相同的掩码,并且对另一部分进行异或运算,从而将其恢复为原始值。可以通过不同的拆分重复此操作,以便所有位都有机会影响所有其他位并受到所有其他位的影响,并且只需反向重放该链即可对其进行解密。

类似地,破坏性移位和按位与仅用作异或掩码,用于置换原始值的完整副本。

k ^= k >> 11意思是取 k 的前 21 位,并在 k 的后 21 位上异或。k 的前 11 位保持不变,我们可以使用它们通过再次异或这些位来恢复 k 的下 11 位。然后我们可以使用这些新发现的 k 的原始位来恢复 k 其余部分的原始值。

于 2013-05-25T10:51:00.813 回答