你是如何创造的;“好”;php中的随机md5哈希?
对于一些情况,我需要创建随机md5哈希。你知道做这件事最好/最安全的方法是什么吗 一些用例你是如何创造的;“好”;php中的随机md5哈希?,php,hash,md5,uniqueidentifier,Php,Hash,Md5,Uniqueidentifier,对于一些情况,我需要创建随机md5哈希。你知道做这件事最好/最安全的方法是什么吗 一些用例 验证电子邮件地址 重置密码 用于身份验证的某种会话id,而不是密码(例如:当有人点击“记住我”时,我不想将密码存储在cookie中) 背景 我知道rand()不应用于安全相关应用程序。因此,我选择: md5( uniqid(mt_rand(),true) ); 现在我在aboutuniqid()中读到,它不能用于安全目的。这是有意义的,因为它通常只给出时间戳之类的东西 但是,如果像我一样使用随机前缀
- 验证电子邮件地址
- 重置密码
- 用于身份验证的某种会话id,而不是密码(例如:当有人点击“记住我”时,我不想将密码存储在cookie中)
rand()
不应用于安全相关应用程序。因此,我选择:
md5( uniqid(mt_rand(),true) );
现在我在aboutuniqid()
中读到,它不能用于安全目的。这是有意义的,因为它通常只给出时间戳之类的东西
但是,如果像我一样使用随机前缀-mt_rand()
,那么它还可以吗?或者在这种情况下应该使用更好的前缀吗
提前谢谢 您不需要“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\u对原始值进行编码
或bin2hex
以获得ASCII字符串。您不需要“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\u对原始值进行编码
或bin2hex
以获得ASCII字符串。您不需要“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\u对原始值进行编码
或bin2hex
以获得ASCII字符串。您不需要“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\u对原始值进行编码
或bin2hex
以获得ASCII字符串。我刚刚完成了一个相当健壮的Bash脚本的开发,该脚本生成了质量相当好的md5sum。你可以找到它
它具有以下特点:
时间戳降低到纳秒
用户可修改从/dev/uradom收集的数据量(默认值为.25秒)
用户可修改收集的鼠标移动数据量(默认值为.25秒,只需使用xinput--list
并使用-M
运行一次即可)
可动态修改的文本语句,可设置为默认值或随每次调用动态发送,例如-s“$(history | tail-5)”
您可以很容易地移植到PHP,或者通过shell_exec从PHP调用它:$random_md5sum=shell_exec('/path/to/gen_uniq_id.bsh-m1-r1-s“最喜欢的报价$(历史记录| tail-5)”)代码>我刚刚完成了一个相当健壮的Bash脚本的开发,它可以生成高质量的md5sum。你可以找到它
它具有以下特点:
时间戳降低到纳秒
用户可修改从/dev/uradom收集的数据量(默认值为.25秒)
用户可修改收集的鼠标移动数据量(默认值为.25秒,只需使用xinput--list
并使用-M
运行一次即可)
可动态修改的文本语句,可设置为默认值或随每次调用动态发送,例如-s“$(history | tail-5)”
您可以很容易地移植到PHP,或者通过shell_exec从PHP调用它:
$random_md5sum=shell_exec('/path/to/gen_uniq_id.bsh-m1-r1-s“最喜欢的报价$(历史记录| tail-5)”)代码>我刚刚完成了一个相当健壮的Bash脚本的开发,它可以生成高质量的md5sum。你可以找到它
它具有以下特点:
时间戳降低到纳秒
用户可修改从/dev/uradom收集的数据量(默认值为.25秒)
用户可修改收集的鼠标移动数据量(默认值为.25秒,只需使用xinput--list
并使用-M
运行一次即可)
可动态修改的文本语句,可设置为默认值或随每次调用动态发送,例如-s“$(history | tail-5)”
您可以很容易地移植到PHP,或者通过shell_exec从PHP调用它:
$random_md5sum=shell_exec('/path/to/gen_uniq_id.bsh-m1-r1-s“最喜欢的报价$(历史记录| tail-5)”)代码>我刚刚完成了一个相当健壮的Bash脚本的开发,它可以生成高质量的md5sum。你可以找到它
它具有以下特点:
时间戳降低到纳秒
用户可修改从/dev/uradom收集的数据量(默认值为.25秒)
用户可修改收集的鼠标移动数据量(默认值为.25秒,只需使用xinput--list
并使用-M
运行一次即可)
可动态修改的文本语句,可设置为默认值或随每次调用动态发送,例如-s“$(history | tail-5)”
您可以很容易地移植到PHP,或者通过shell_exec从PHP调用它:
$random_md5sum=shell_exec('/path/to/gen_uniq_id.bsh-m1-r1-s“最喜欢的报价$(历史记录| tail-5)”)代码>如果有帮助,请参阅。您可以使用base64\u encode
进行编码。@Log1cツ: Thx,里面有很多!最重要的可能是函数openssl\u random\u pseudo\u bytes()
作为替代方法。@Prava MindfireSolutions:编码与其说是个问题,不如说是它的数据(base64也可以很容易地被解码/“反转”)。请参阅,如果它有帮助的话。您可以使用base64\u encode
进行编码。@Log1cツ: Thx,里面有很多!最重要的可能是函数openssl\u random\u pseudo\u bytes()
作为替代方法。@Prava MindfireSolutions:the en