Gaj*_*jus 66
bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM));
Run Code Online (Sandbox Code Playgroud)
示例输出:
d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef
Run Code Online (Sandbox Code Playgroud)
请记住,"最好"是一个相对术语.您需要在安全性,唯一性和速度之间进行权衡.上面的示例适用于99%的情况,但如果您正在处理特别敏感的数据,您可能想要了解MCRYPT_DEV_URANDOM和MCRYPT_DEV_RANDOM之间的区别.
最后,有一个RandomLib "用于生成各种强度的随机数和字符串".
请注意,到目前为止,我假设您要生成一个随机字符串,这与从值中导出哈希值不同.对于后者,请参阅password_hash.
0b1*_*011 21
random_bytes()从PHP 7.0开始提供(或者使用5.2到5.6的polyfill):
$hash = bin2hex(random_bytes(16));
echo serialize($hash);
Run Code Online (Sandbox Code Playgroud)
输出:
S:32: "c8b2ca837488ff779753f374545b603c";
Ant*_*ney 11
您可以使用PHP的内置散列函数,sha1以及md5.选择一个,而不是两个.
有人可能会认为使用两者sha1(md5($pass))都是一种解决方案.使用它们不会使您的密码更安全,它会导致冗余数据并且没有多大意义.
看看PHP Security Consortium:Password Hashing他们提供了一篇有关弱点的好文章,并通过散列提高了安全性.
随机数代表" ñ使用umbers 一次 ".他们正在请求用来防止未经授权的访问,他们送一个秘密密钥和检查,关键是用你的代码每次.
您可以在FullThrottle Development的PHP NONCE Library中查看更多信息
从php 5.3.0开始,您可以使用openssl_random_pseudo_bytes生成伪随机字节串.您可以使用此函数并使用以下方法之一以某种方式将其转换为字符串:
$bytes = openssl_random_pseudo_bytes(32);
$hash = base64_encode($bytes);
Run Code Online (Sandbox Code Playgroud)
要么
$bytes = openssl_random_pseudo_bytes(32);
$hash = bin2hex($bytes);
Run Code Online (Sandbox Code Playgroud)
第一个将生成最短的字符串,包括数字,小写,大写和一些特殊字符(=,+,/).第二种方法将生成十六进制数字(0-9,af)
使用random_bytes()如果它是可用的!
$length = 32;
if (function_exists("random_bytes")) {
$bytes = random_bytes(ceil($length / 2));
$token = substr(bin2hex($bytes), 0, $length)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78287 次 |
| 最近记录: |