你如何创造"好"在PHP中随机md5哈希?

时间:2014-06-04 12:27:57

标签: php hash md5 uniqueidentifier

在某些情况下,我需要创建随机的md5哈希值。你知道最好/最安全的方法吗?

一些用例

  • 验证电子邮件地址
  • 重设密码
  • 用于身份验证的某种会话ID,而不是密码(例如:当有人点击“记住我”时,我不想将通行证存储在cookie中)

背景

我知道rand()不应该用于安全相关的应用程序。出于这个原因,我选择了:

md5( uniqid(mt_rand(),true) );

现在我在php manual中了解uniqid()不得将用于安全目的。哪种有意义,因为它通常只是提供类似时间戳的东西。

但是当与一个随机前缀mt_rand()结合使用时很好 - 就像我一样,或者在这种情况下是否应该使用更好的东西?

提前谢谢!

3 个答案:

答案 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_encodebin2hex原始值以获取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())获取唯一键。非常简单的方法.. 试试吧。