在某些情况下,我需要创建随机的md5哈希值。你知道最好/最安全的方法吗?
我知道rand()
不应该用于安全相关的应用程序。出于这个原因,我选择了:
md5( uniqid(mt_rand(),true) );
现在我在php manual中了解uniqid()
,不得将用于安全目的。哪种有意义,因为它通常只是提供类似时间戳的东西。
但是当与一个随机前缀mt_rand()
结合使用时很好 - 就像我一样,或者在这种情况下是否应该使用更好的东西?
答案 0 :(得分:3)
您不需要" MD5哈希",您只需要一个随机字符串。这些根本不需要与MD5有任何关系。所以你需要的只是一个好的PRNG。例如:
$token = mcrypt_create_iv($rawLength, MCRYPT_DEV_URANDOM);
// or
$token = openssl_random_pseudo_bytes($rawLength);
// or
$token = file_get_contents('/dev/urandom', false, null, 0, $rawLength);
然后base64_encode
或bin2hex
原始值以获取ASCII字符串。
答案 1 :(得分:0)
我刚刚完成了一个相当强大的Bash脚本,它可以生成相当高质量的md5sum。你可以找到它https://code.google.com/p/gen-uniq-id/source/browse/gen_uniq_id.bsh
它具有以下功能:
时间戳低至纳秒,
来自/ dev / urandom的用户可修改数量的收集数据(默认为.25秒),
用户可修改的鼠标移动数据量(默认为.25秒,只需使用xinput --list
并使用-M<your_mouse_device_id>
运行一次),
可动态修改的文本语句,可以设置为默认语句或动态发送每个调用,例如-s"$(history | tail -5)"
。
您可以轻松地移植到PHP或通过shell_exec从PHP调用它:
$random_md5sum = shell_exec('/path/to/gen_uniq_id.bsh -m1 -r1 -s"favorite quote$(history | tail -5)"');
答案 2 :(得分:-4)
您可以使用md5(date())
获取唯一键。非常简单的方法..
试试吧。