将哈希值(MD5,SHA1等)转换为固定范围内的整数

3
假设我有一个哈希函数 md5,我对一些字符串进行哈希处理并得到了某个值,现在我需要将其转换为固定范围内的整数值。
如此处所述的 crc32() 算法用于将 md5(或可能是其他哈希方法)转换为整数,在其中可以设置可能的结果整数范围(例如:1-10000)? 例如,假设:
$value=md5("dog");
echo $value;

Output: "06d80eb0c50b49a509b49f2424e8c805"`

现在我需要将这个值转换为整数,以便可以在大小为1000的查找表中使用它。因此,当我进行转换时,此哈希值的大小应介于0到999之间。我该怎么做?

1
这将是一个具有很多重叠的查找表,因此最好使用模数/除法余数($crc%1000)。 - mario
如果我制作一个大的查找表,比如1亿个条目,使用crc32()不是一个好选择,尽管你是正确的,但对于大量的数据,我需要使用md5。 - RAJAT SHARMA
1个回答

2

您可以使用base_convert将md5的十六进制输出转换为十进制,然后使用bcmod函数将其转换为所选范围内的数字:

<?php
$valuetohash = "dog";
$range = 1000;
$hashslot = bcmod(base_convert(md5($valuetohash), 16, 10), $range);
echo $hashslot;

输出:26

将“dog”更改为“parrot”会产生800,将其更改为“cat”会产生260(有趣的是,这表明猫比狗好10倍)。

请注意,如果您使用的是不映射到“一个大十六进制数”的不同哈希(例如crc32映射到一个整数),则需要以不同的方式执行上述操作(在crc32的情况下,您可以直接%mod到范围内,例如,在您问题的原始评论中所述)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接