单向散列,具有可变长度的字母数字输出

时间:2012-04-26 13:17:16

标签: hash alphanumeric hash-collision variable-length

我需要单向哈希字母数字+特殊字符(ascii)可变长度字符串(10-20个字符)。 输出应该是可变长度的,但最多25个字符长,字母数字和不区分大小写。

此外,我不想产生碰撞,所以我需要一些无碰撞的东西,或者至少没有证明(但是?)产生碰撞。

1 个答案:

答案 0 :(得分:1)

Here是关于不同哈希函数的很多好东西。我不认为你做的是什么。他们都会发生碰撞。

也许您应该查看一些简单的加密算法。

这是一种简单的加密技术,可以做你想要的:

char szInput = "hash me", szOutput[20], szKey = "foo";
int i, cbKey = strlen(szKey), cbInput = strlen(szInput);

for (i=0 ; i<cbInput ; ++i)
  szOutput[i] = szInput[i]^szKey[i%cbKey];  // xor with a differnt char from the key

你不会识别输出,因为它是可逆的,所以它不会发生碰撞。

另一种难以破译的方法是使用密钥中的当前字符作为您应该对rand()进行的调用计数。 Xor使用最后一次调用rand()的结果。由于rand()总是为给定的种子生成相同的数字流,因此您的“哈希”不会发生冲突并且可以解密。

如果您希望哈希是“单向”...那么扔掉密钥!