如何在php中包含密码变量的随机盐

时间:2012-08-26 23:31:47

标签: php passwords password-protection salt

我有一个pssword变量,其中包含用户密码,该密码在密码的开头和结尾包含一些混乱,以便密码密码。以下是此代码:

$teacherpassword = md5(md5("j92".$teacherpassword."djS"));  

显然,选择加密密码的字符对于所有密码都是相同的字符。

我想要的是创建一个随机字符生成器,​​使盐的前3个字符和最后3个字符都是随机的,这样每个密码都会有一个随机的盐。

下面是php生成器创建为盐随机挑选字符:

$salt = ""; 
for ($i = 0; $i < 40; $i++) { 
   $salt .= substr(
     "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 
     mt_rand(0, 63), 
     1); 
}

我的问题是如何让生成器为盐挑出6个随机字符,然后在密码的前面粘贴其中3个字符,在密码末尾粘贴其他3个字符?

例如:

密码1可以是:$ teacherpassword = md5(md5(“jfs”。$ teacherpassword。“sfS”));
密码2可以是:$ teacherpassword = md5(md5(“4f3”。$ teacherpassword.p.S“));

密码3可以是:$ teacherpassword = md5(md5(“wpw”。$ teacherpassword。“qq2”));

正如您所看到的,所有密码都包含自己的盐,这要归功于盐的php随机生成器

1 个答案:

答案 0 :(得分:0)

一个非常简单的解决方案是使用substr()

  

substr - 返回字符串的一部分

$randomSalt = "abcdef";

$preSalt = substr($randomSalt, 0,3); // abc
$postSalt = substr($randomSalt, 3,3);  // def

$password = md5(md5($preSalt.$teacherpassword.$postSalt));

还有一个建议是使用PHP的uniqueid()函数为您的密码生成随机盐。

  

uniqid - 生成唯一ID