假设您计划设计一个哈希函数,它将生成介于0-256之间的键。使用MD5摘要的前2个数字是否是实现均匀分布的好主意?您对此有何看法?使用md5()加密一些单词(2-10个字母)是否很昂贵?
我知道这是对要求的粗略定义,但讨论这个问题会很棒。
我知道这是对要求的粗略定义,但讨论这个问题会很棒。
对于生成3位哈希值这样简单的任务,没有必要使用加密强度哈希函数。更好的选择是使用更简单的哈希函数。
我不确定相对于其他哈希函数来说MD5有多昂贵,但是有很多更好的方法可以创建小型哈希值(请参见此文章以获取一些算法思路)。
MD5旨在将输入均匀地分布到所有输出字节上,因此它与任何其他通用哈希函数一样好-如果您只想要256个值,那么听起来有点过度。
请注意,MD5的输出为128字节(16字节),只是文本表示形式为十六进制数字-因此实际上没有MD5的前两个数字-只需使用底部8位即可。
你还没有解释你将如何使用哈希,以及在仅有256个输出值的情况下不可避免的冲突会发生什么。
我认为即使是MD5(现在已经不再是加密安全的了),也对可能的应用程序来说过于复杂了。
我可能会选择一个CRC(循环冗余校验)算法为您生成一个16位或32位的数字,并且可能会给您足够好的分布。