【发布时间】:2012-08-21 12:19:42
【问题描述】:
我有一个 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 随机生成器
【问题讨论】:
-
您可以在开头或结尾添加盐,因为这样做更容易,而且安全性也不会降低
-
@Gabriel Santos:实际上添加回合并不是那么“有趣”。但是添加数千个而不只是一对是有意义的
-
@zerkms 我认为
hash('ANY SHA-2 HERE', 'SALT WITH PASSWORD HERE')更符合逻辑.. -
@Gabriel Santos:拥有 sha-512 会更好,但
md5(md5())并不是真的哈哈 ;-)
标签: php passwords password-protection salt