我写了一个函数PHP
来为我的应用程序生成一个随机密码(只有 0-9a-zA-Z)。生成的密码必须是加密安全的,并且尽可能随机。IE 密码很敏感。
我做的大技巧是$possible
每次都洗牌,所以即使mt_rand()
不是真正随机的,也不应该是可预测的。
我的功能中是否有任何建议的更改或安全问题?使用openssl_random_pseudo_bytes()
而不是mt_rand()
真的会让算法更强大、更安全吗?
public function generate_random($length = 15) {
$random = "";
$possible = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$possible = str_shuffle($possible);
$maxlength = strlen($possible);
if ($length > $maxlength) {
$length = $maxlength;
}
$i = 0;
while ($i < $length) {
$random .= substr($possible, mt_rand(0, $maxlength-1), 1);
$i++;
}
return $random;
}
谢谢。