众所周知,MT回火功能是可以逆转的。可以在线获取源代码来执行此操作here http://b10l.com/?p=24。我试图弄清楚这是如何工作的,以及如何以编程方式解决这个问题和类似的问题。
我正在努力解决的是,对有限大小的变量进行移位操作会导致不可逆的数据丢失。类似地,按位 AND 运算也会导致永久性数据丢失,但示例代码 http://b10l.com/?p=24提供可以将任何值反转为其原始预调状态!
另一件事是我觉得令人困惑的是,非临时移位操作的移动方向和数量与临时函数相同。
考虑一个结构菲斯特网络 http://en.wikipedia.org/wiki/Feistel_cipher。基本操作原理是将数据分成两部分,并将一部分哈希为掩码,以便与另一部分进行异或。即使哈希本身不是可逆的,这也是可逆的。在解密过程中,使用相同的(可能具有破坏性的)哈希运算来生成与之前相同的掩码,并且与其他部分进行异或运算,从而将其恢复为其原始值。可以使用不同的分割重复此操作,以便所有位都有机会影响所有其他位并受所有其他位影响,并且只需反向重放该链即可对其进行解密。
类似地,破坏性移位和按位与仅用作异或掩码,用于排列原始值的完整副本。
k ^= k >> 11
表示取 k 的高 21 位并对 k 的低 21 位进行异或。 k 的前 11 位保持不变,我们可以通过再次对这些位进行异或运算来使用它们来恢复 k 的下 11 位。然后我们可以使用这些新发现的k的原始位来恢复k的其余部分的原始值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)