【问题标题】:How to include random salt with password variable in php如何在php中包含带有密码变量的随机盐
【发布时间】: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


【解决方案1】:

一个非常简单的解决方案是使用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

【讨论】:

  • 问一个小问题,如果我选择$preSalt = substr($randomSalt, mt_rand(0, 63),3);,会从字符列表中选择任意三个字符吗?
  • 是的,substr 的第三个参数是你想要返回的 sting 的长度。
  • @user1626268:你为什么要在密码的两边加盐?为什么不直接追加到末尾?
  • @zer - 黑客不会在 both 方面期待它 ;) 我猜这只是另一个级别的混淆......
  • @Lix:嗯,通过默默无闻的安全?
猜你喜欢
  • 2011-04-30
  • 2011-10-16
  • 2010-10-06
  • 1970-01-01
  • 2023-03-06
  • 2016-07-08
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多