我的任务是在 Perl 中为可变长度的二进制字符串实现 XOR 哈希;长度可以从 18 到超过 100。根据我的理解,我用一个键对我拥有的二进制字符串进行异或运算。我已经在网上阅读了这两个不同的应用程序:
- 一种选择是,如果我的密钥长度比字符串短,我将字符串分成与密钥长度相同的块;然后将它们全部折叠在一起(因此结果哈希的长度将是密钥的长度)。
- 我还读到您只是对字符串的每个键长度块的键进行异或运算(因此生成的哈希将是字符串的长度)。
其中一个比另一个更正确吗?这是用于索引中的散列值,所以我倾向于认为第一个选项(可能产生短散列)会更好。
最后,有没有生成足够随机密钥的好方法?根据要散列的字符串的长度,是否有合适的长度来选择密钥?
编辑:顺便说一句,我非常清楚这个哈希值有多糟糕。严格来说是为了比较。:)