我一直负责在Perl中为变长二进制字符串实现XOR哈希;长度可以从18到100多。在我对它的理解中,我用一个键对X的二进制字符串进行异或运算。我读过这个在线的两个不同的应用程序:XOR哈希如何工作+选择密钥
- 其中一个选项是如果我的密钥的长度比字符串短,我把字符串分成块的密钥长度;然后这些都被折叠在一起(因此得到的散列的长度将是密钥的长度)。
- 我也读过,你只是在字符串的每个关键字长度块之间进行异或操作(因此生成的哈希值将是字符串的长度)。
其中一个比另一个更正确吗?这是用于索引中的哈希值,所以我倾向于认为第一个选项(可能会产生短的哈希值)会更好。
最后,有没有一种很好的方法来生成一个足够随机的密钥?根据要被散列的字符串的长度,是否有一个好的长度来选择密钥?
编辑:顺便说一下,我很清楚这个散列工作有多糟糕。这是严格的比较目的。 :)
任何使用XOR的特定推理?这需要是可逆的吗?这也许是功课吗?只是好奇。 – 2010-03-10 01:58:24
不要忘记,在使用XOR“加密”/散列时,可以使用以下任何两部分:密文,明文,密钥 - 查找其余部分。请谨慎行事;) – Cam 2010-03-10 02:02:05
也是,你为什么要用钥匙?听起来不像是给我的散列。 – Cam 2010-03-10 02:06:55