【问题标题】:salt and crypt assistance盐和地穴协助
【发布时间】:2012-11-23 22:36:39
【问题描述】:

我得到了我的登录页面,我还使用它来验证用户名和密码。

我坚持检查数据库中提供的密码。这是因为我在注册时使用了此代码以提高安全性。

$hashed_password = crypt('pass1'); 

任何人都可以帮助我创建一个 if 语句来检查数据库加密密码到提供的用户密码。我真的很感激。

在登录页面中......这是我的密码帖子。

$password = htmlentities(trim($_POST['password']));

【问题讨论】:

  • 无需修改密码,如果用户希望空格成为其密码的一部分,该怎么办
  • 使用 htmlentities 很疯狂!
  • 无需屏蔽密码!无论如何,您永远不会“按原样”存储它,为什么要限制用户?
  • 您应该允许任何符号作为密码
  • PHP 5.5 将引入a new password hashing API with secure defaults。还有 a PHP 5.3.7+ compat library 做同样的事情。

标签: php html sql


【解决方案1】:
// let the salt be automatically generated
$hashed_password = crypt('mypassword'); 

// You should pass the entire results of crypt() as the salt for comparing
if (crypt($user_input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}

编辑

crypt() 有两个参数,第二个是所谓的 salt (see wiki)。如果未提供,salt 将自动生成(因此可以认为是随机的)。整个算法都使用了盐,因此要将您想要的crypt() 用户提供的密码与您之前使用的相同盐进行比较,否则结果会有所不同。为了使这种可能的盐被添加到 crypt 结果(在开始时),因此提供以前的结果用于比较目的只需将旧盐馈送crypt()(它是 2 或 12 个字符,具体取决于所使用的算法)。

【讨论】:

  • 感谢您的回复!我想知道用户输入变量实际上在那里做什么?
  • 加密不是更安全。我的目标是尽可能减少蛮力
  • 为什么要这样做?他唯一想帮忙的。当您学习一门新语言时,您会从更有经验的人那里获取所有信息
  • @PeeHaa sha1 有什么问题? stackoverflow.com/q/2772014/1741542 说它仍然可以存储密码。
  • 在 php.net 上进行了另一次阅读,显然不应使用 sha1,因为 crypt 通常更慢分解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多