众所周知,可以反转MT回火功能。可以在线获取源代码here。我试图弄清楚它是如何工作的,以及如何以编程方式处理这个和类似的问题。
我正在努力的是,对有限大小的变量进行移位操作会导致不可逆转的数据丢失。类似地,逐位AND操作也应该导致永久性数据丢失,但是提供的sample code可以将任何值反转为它的原始预调状态!
另一件事是,我发现令人困惑的是,非模板转换操作正朝着同一方向转移。数量作为模板功能。
答案 0 :(得分:5)
考虑Feistel network的结构。基本操作原理是将数据分成两部分,并将一部分散列到掩码中以异或 - 或另一部分。即使哈希本身不是,这也是可逆的。在解密期间,相同(潜在破坏性)散列操作用于生成与之前相同的掩码,并且在另一部分上排除,从而将其恢复到其原始值。可以使用不同的拆分重复此操作,以便所有位都有机会影响所有其他位并受其影响,并且只需反向重放链以解密它。
类似地,破坏性移位和按位和仅用作用于置换原始值的完整副本的异或掩码。
k ^= k >> 11
意味着取k的前21位并且取k的底部21位的异或。 k的前11位保持不变,我们可以使用它们通过再次对这些位进行异或来恢复k的下一个11位。然后我们可以使用这些新发现的k的原始位来恢复k的其余部分的原始值。