首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查此方法是否适用于唯一is

检查此方法是否适用于唯一is
EN

Stack Overflow用户
提问于 2014-03-11 22:50:11
回答 2查看 205关注 0票数 0

我正在尝试使用md5编码来创建多样化内容的ids,但是,我不确定这种方法。

代码语言:javascript
复制
<?php    
$prefix = 'stackoverflow';
$length = 11;
$id = md5( $prefix . uniqid(microtime()) );

$part1 = substr($id, 0,(floor($length / 2))); //First 5 chars

$id = strrev($id); //Reverse md5

$part2 = substr($id, 0,(ceil($length / 2))); //First 6 chars of the reversed md5

$final_id = $part2 . $part1; //Reverse final id
?>
EN

回答 2

Stack Overflow用户

发布于 2014-03-11 22:53:36

你在试图重新发明一个轮子。

http://www.php.net/manual/en/function.uniqid.php

string uniqid ([ string $prefix = "“,= false ] )

根据当前时间(以微秒为单位)获取带前缀的唯一标识符。

此外,您可能希望使用真实的全局唯一标识符(windows特定的扩展名)

http://www.php.net/manual/en/function.com-create-guid.php

票数 2
EN

Stack Overflow用户

发布于 2014-03-11 23:14:09

具有随机、唯一is的东西是熵。也就是说,它是否包含足够的随机数据,以便在数学上保证在实践中是唯一的?

代码语言:javascript
复制
$id = md5( $prefix . uniqid(microtime()) );

在这里,$prefix是静态的,不会增加熵。microtime根本不是随机的,尽管它两次产生相同值的可能性非常低,但它是存在的。uniqid为该值增加了一点熵,这在实践中可能已经足够好了。在此之后,您将散列值并缩短其长度,这意味着您将再次去除熵。

总体而言,你从一开始就增加了很少的熵,然后又减少了一些,这总体上不会给我留下好的感觉。在实践中,对于一个小站点来说,它可能已经足够好了,但我不敢打赌。

你真正需要的只是一个随机数生成器,它几乎在所有情况下都内置在你的操作系统中:

代码语言:javascript
复制
$id = bin2hex(file_get_contents('/dev/urandom', false, null, -1, 32));

包装它的函数包括openssl_random_pseudo_bytesmcrypt_create_iv。试图通过使用一些看似令人困惑的字符串连接来重新发明随机数生成器是徒劳的,这不是真正的随机性( /dev/urandom在大多数情况下也不是真正的随机,但它比您以往任何时候都更接近随机)。根据您的情况,您可能还想开始使用UUIDs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22329270

复制
相关文章

相似问题

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