目标:寻找最安全的随机字符串生成器。在字符串中使用字母、数字,如果可能的话还要加上特殊字符。
我已经在这里和其他地方阅读了很多文章,但仍然听到很多不同的答案/意见。希望了解安全和密码学的人可以在这里发表意见。
以下函数将用于生成一个8个字符的随机密码和一个128个字符的随机令牌。
函数1:
我已经在这里和其他地方阅读了很多文章,但仍然听到很多不同的答案/意见。希望了解安全和密码学的人可以在这里发表意见。
以下函数将用于生成一个8个字符的随机密码和一个128个字符的随机令牌。
函数1:
/**
* Used for generating a random string.
*
* @param int $_Length The lengtyh of the random string.
* @return string The random string.
*/
function gfRandomString($_Length) {
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
$pass = array(); //remember to declare $pass as an array
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
for ($i = 0; $i < $_Length; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass); //turn the array into a string
}
功能2:
PHP.net文档中提到: crypto_strong: 如果传入函数,它将持有一个布尔值,用于确定算法是否是“密码学安全的”,例如,对于GPG、密码等使用来说是安全的。如果是,则为TRUE,否则为FALSE。
那是基于服务器吗?如果我测试一次,并且它能够生成一个crypto_strong字符串,它会一直保持这样吗?还是每次都需要检查并创建循环直到生成一个crypto_strong字符串。
/**
* Used for generating a random string.
*
* @param int $_Length The length of bits.
* @return string The random string.
*/
function gfSecureString($_Length) {
$Str = bin2hex(openssl_random_pseudo_bytes($_Length));
return $Str;
}
我欢迎任何改进加密强度的建议。
random_int
)。或者等待赏金标记。✔勾号在那里最不有用的答案上并不会使它变得不是重复的。让我们不要每周都用新问题来稀释主题。 - mario