如何用PHP生成随机密码?

use*_*729 37 php random passwords

或者是否有自动生成随机密码的软件?

Mat*_*ins 96

刚建立的随机字符串a-z,A-Z,0-9(或任何你想)到所需的长度.这是PHP中的一个例子:

function generatePassword($length = 8) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $count = mb_strlen($chars);

    for ($i = 0, $result = ''; $i < $length; $i++) {
        $index = rand(0, $count - 1);
        $result .= mb_substr($chars, $index, 1);
    }

    return $result;
}
Run Code Online (Sandbox Code Playgroud)

要进行优化,如果在单次执行期间多次调用此函数,则可以$chars在方法(或父类)中定义为静态变量或常量.

  • 如果你选择这样的方法,我建议删除所有元音,以及`l`,`1`,`0`和`o`,因为它们可能会让用户感到困惑,具体取决于你的字体. (14认同)
  • 我会删除元音因为错误的人总会得到不好的结果(它已经发生了两次). (9认同)
  • @William - 简单地使用str_shuffle将不会是随机的,因为你最终会得到零或一个"a",零或一个"b",零或一个"c"等等.你永远不会有重复的字符,在我看来,这显着降低了价值. (6认同)
  • 提出这个问题更具学术性,但在使用(确定性)基于php的函数(rand()或散列函数)的任何解决方案中,它都是伪随机的,而不是真正的随机种子算法.您可以使用对基于大气噪声的Web服务的API调用来替换该部分(例如http://www.random.org/clients/http/)但是,在大多数情况下,可能不值得增加对随机性差异的依赖性. (4认同)
  • @ nickf的小费也是另一个原因.我喜欢避免为有头脑的PC人员发誓.你会惊讶地发现你经常会用元音包含顽皮的单词. (2认同)

Dol*_*lph 12

这是一个简单的解决方案.它将包含小写字母和数字.

substr(str_shuffle(strtolower(sha1(rand() . time() . "my salt string"))),0, $PASSWORD_LENGTH);
Run Code Online (Sandbox Code Playgroud)

这是一个更强大的解决方案,可以在所需范围内随机生成所需字符范围内的字符代码.

function generateRandomPassword() {
  //Initialize the random password
  $password = '';

  //Initialize a random desired length
  $desired_length = rand(8, 12);

  for($length = 0; $length < $desired_length; $length++) {
    //Append a random ASCII character (including symbols)
    $password .= chr(rand(32, 126));
  }

  return $password;
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*iam 6

我想玩这个游戏.最简单的方法是:

function rand_passwd( $length = 8, $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ) {
    return substr( str_shuffle( $chars ), 0, $length );
}
Run Code Online (Sandbox Code Playgroud)

这几乎只是对第一个答案的修改.在第二个参数中指定所需的字符,在第一个参数中指定密码的长度.

  • 这只是我在回复你对我的回答的评论时发布的重复评论:简单地使用str_shuffle将不会是随机的,因为你最终会得到零或一个"a",零或一个"b",零或者一个"c"等.你永远不会有重复的字符,这在我看来会显着降低价值. (6认同)

小智 5

我就是这样做的。

$pw = ""; 
for ($i = 0; $i < 13; $i++)
{
    $pw .= chr(rand(33, 126));
}
Run Code Online (Sandbox Code Playgroud)