我正在尝试使用md5编码来创建多样化内容的ids,但是,我不确定这种方法。
<?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
?>发布于 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
发布于 2014-03-11 23:14:09
具有随机、唯一is的东西是熵。也就是说,它是否包含足够的随机数据,以便在数学上保证在实践中是唯一的?
$id = md5( $prefix . uniqid(microtime()) );在这里,$prefix是静态的,不会增加熵。microtime根本不是随机的,尽管它两次产生相同值的可能性非常低,但它是存在的。uniqid为该值增加了一点熵,这在实践中可能已经足够好了。在此之后,您将散列值并缩短其长度,这意味着您将再次去除熵。
总体而言,你从一开始就增加了很少的熵,然后又减少了一些,这总体上不会给我留下好的感觉。在实践中,对于一个小站点来说,它可能已经足够好了,但我不敢打赌。
你真正需要的只是一个随机数生成器,它几乎在所有情况下都内置在你的操作系统中:
$id = bin2hex(file_get_contents('/dev/urandom', false, null, -1, 32));包装它的函数包括openssl_random_pseudo_bytes和mcrypt_create_iv。试图通过使用一些看似令人困惑的字符串连接来重新发明随机数生成器是徒劳的,这不是真正的随机性( /dev/urandom在大多数情况下也不是真正的随机,但它比您以往任何时候都更接近随机)。根据您的情况,您可能还想开始使用UUIDs。
https://stackoverflow.com/questions/22329270
复制相似问题