【发布时间】:2010-03-10 01:52:00
【问题描述】:
我的任务是在 Perl 中为可变长度的二进制字符串实现 XOR 哈希;长度可以从 18 到超过 100。根据我的理解,我用一个键对我拥有的二进制字符串进行异或运算。我已经在网上阅读了这两个不同的应用程序:
- 其中一个选项是,如果我的密钥长度比字符串短,我将字符串分成与密钥长度相同的块;然后将它们全部折叠在一起(因此生成的哈希的长度就是键的长度)。
- 我还了解到,您只需对字符串的每个键长度块的键进行异或运算(因此生成的哈希将是字符串的长度)。
其中一个比另一个更正确吗?这是用于索引中的散列值,所以我倾向于认为第一个选项(可能会产生短散列)会更好。
最后,有没有生成足够随机密钥的好方法?根据要散列的字符串的长度,是否有合适的密钥长度可供选择?
编辑:顺便说一句,我非常清楚这个哈希值有多糟糕。严格来说是为了比较。 :)
【问题讨论】:
-
使用 XOR 有什么特别的原因吗?这需要可逆吗?这也许是家庭作业?只是好奇。
-
不要忘记以下任何两个部分:密文、明文、密钥 - 当您使用异或“加密”/散列时,可用于查找剩余部分。谨慎行事;)
-
还有,你为什么用钥匙?对我来说听起来不像是哈希。
-
不,不是作业——刚做了一些项目工作,我想比较不同的哈希值,我听说过 XOR 哈希值,但从未使用过。这里也不需要加密。我对 XOR 散列的理解(来自在线某处)是用于 XORing 的密钥 - 否则,您是否只需将原始字符串折叠在一起并 XOR ,而不使用密钥?