我必须实现一个简单的散列算法。
输入数据:
产出数据:
要求:
可能的解决办法:
还有其他的可能性吗?
发布于 2012-04-10 12:24:56
HMAC似乎是你想要的。因此,您可以使用基于SHA的HMAC,只需使用结果哈希的子字符串。这应该是相对安全的,因为加密散列的比特应该尽可能独立和不可预测。
但是,根据您的环境,这可能会花费太多的处理时间,因此您可能不得不选择一个更简单的散列方案来构造HMAC。
原始答案在评论中的讨论是基于:
由于您无论如何都可以忘记密码属性(通过对5位哈希的蛮力攻击来查找冲突是很简单的),所以您最好使用CRC或Hamming代码,并免费获得错误检测。
发布于 2013-01-21 20:34:14
Mensi建议使用截断的HMAC是一个很好的建议,但是如果您碰巧在一个高度受限的系统上并且想要更快或更简单的东西,您可以使用任何分组密码,用它加密您的16位值(填充到一个完整块),并将结果截断到6位。
与计算伪随机函数的HMAC不同,块密码是伪随机置换 --每个输入都映射到不同的输出。但是,当您丢弃块密码输出的除六位以外的所有比特时,剩下的内容将非常类似于伪随机函数。对于重复的输出,会有一个很小的偏差,但是(假设分组密码的块大小比它应该有的6位大得多),它会非常小,几乎是无法检测的。
对于非常低端的系统来说,一个很好的分组密码选择可能是茶或其继任者XTEA和XXTEA。虽然对这些密码有一些已知的攻击,但它们都需要比应用程序中可能的更广泛的访问密码。
https://stackoverflow.com/questions/10088645
复制相似问题