首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查哈希冲突

如何检查哈希冲突
EN

Stack Overflow用户
提问于 2012-03-18 23:01:24
回答 2查看 2.2K关注 0票数 3

我可以使用哪个函数来验证nexts 99999999 ids中是否会有冲突?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-03-18 23:41:51

如果您的哈希函数按假设工作,并且总是为相同的输入生成相同的输出。并且您的输入被限制为99999999个数字,您可以简单地为这些数字生成散列并验证是否没有重复的数字。

尽管最好的解决方案是从数学上证明您的散列函数将为这些数字产生唯一的结果。

票数 3
EN

Stack Overflow用户

发布于 2012-03-19 00:42:17

如果散列可以是完全随机的,请尝试使用其中的当前时间戳作为额外的随机数生成器。例如:

代码语言:javascript
复制
$hash = sha1(microtime() * rand(1, 9999));

复制出来的可能性相当小。此外,尝试将数据库字段设置为UNIQUE字段,确保不会重复插入。然后,为了完成任务,您可以创建一个尝试直到成功的循环,如下所示:

代码语言:javascript
复制
// SHA1 values shouldn't need escaping, but it doesn't really hurt to be extra sure :)
$query = "INSERT INTO `table` (`hash`) VALUES('" . mysql_real_escape_string($hash) . "')";

// Let's try the insert with a max of 10 random hashes
$tries = 10;
while(mysql_query($query) !== true) {
    if($tries <= 0) {
        break; // Something is really failing, stop trying!
    }

    // If this point is reached, apparantly a duplicate was created. Try again.
    $hash = sha1(microtime() * rand(1, 9999));

    // Decrement the tries counter.
    $tries--;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9759352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档