考虑一个费斯特网络的结构。基本操作原则是将数据分成两部分,并将其中一部分哈希为掩码,以进行异或运算。即使哈希本身不可逆,这也是可逆的。在解密期间,使用相同(可能有破坏性)的哈希操作来生成与之前相同的掩码,并将其异或到另一部分中,从而将其恢复到其原始值。可以使用不同的拆分重复此操作,以便所有位都有机会影响和受到所有其他位的影响,只需按相反的顺序重新播放链即可解密它。 同样,破坏性移位和按位与仅用作排列完整副本的异或掩码。
k ^= k >> 11的意思是取k的前21位并将其异或到k的后21位。k的前11位保持不变,我们可以使用它们再次对这些位进行异或,以恢复k的下一个11位。然后,我们可以使用这些新发现的原始位将k的其余部分的原始值恢复到原始状态。
- sh1
2
谢谢,@sh1 - 非常有帮助的解释。你最后一段提到的“21”是错别字吗?如果不是,那我真的很迷惑... - Jonathan Basile
k
是一个32位的值,右移11位意味着底部的11位将被丢弃,只有移位后的顶部21位保留(如21+11=32
)。这21位将与最低有效位对齐进行异或操作;但请记住,该表达式来自编码操作。要解码,您确实需要按11位块处理。 - sh1