crypt密码存储和检索php

时间:2013-08-16 10:58:34

标签: php bcrypt crypt

我正在尝试设置安全登录&使用crypt()注册系统,因为我已经读过这是用于bcrypt

的php存储函数

我正在注册用户,但是要记下密码,然后加密。

$hashed_password = crypt($mypassword);

然后我将$ hashed_pa​​ssword存储在db

然后当用户登录时我试图将密码与存储的匹配。

我在php.net上发现了这个功能但是无法让它工作

$ password是存储的加密密码,$ mypassword是用户输入

if ($password == crypt($mypassword, $password)) {
    echo "Success! Valid password";
}

我知道crypt每次调用时都会生成一个唯一的哈希,所以我不明白该函数是如何工作的。

当我读到crypt()是一个函数并且解密不存在时,我是否完全忽略了这一点?

任何帮助都非常感谢,不仅显示了我的方式错误,而且还显示了完成此安全登录

5 个答案:

答案 0 :(得分:2)

您在crypt()调用中使用了第二个参数,因此将其视为salt。要正确比较,您可以使用:

if ($password == crypt($mypassword)) 
{
    echo "Success! Valid password";
}

但是PHP为散列例程提供了本机功能 - 如果是5.5版本并且被称为password hashing,则会引入它。

对于低于5.5到5.3.7的PHP版本,有一个向后移植的兼容性函数也是如此:https://github.com/ircmaxell/password_compat只需包含它并使用它。

但请注意,您必须从数据库中读取散列密码,然后将其与PHP进行比较。您无法使用新创建的密码哈希查询数据库以查找用户。

答案 1 :(得分:0)

假设数据库中的加密密码为$db_pass,输入的密码为$new_pass。那么这是你如何测试它:

if($db_pass === crypt($new_pass)){
    echo "Success!";
}

这篇文章将help...

答案 2 :(得分:0)

假设当前数据库正在读取密码,我们要做的就是:

} elseif (crypt($pass, $row['pass']) == $row['pass']) {

答案 3 :(得分:-1)

这里有几个步骤..但是,本教程将有所帮助: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

基本上,您希望在数据库中加密密码 - 例如。因此,如果密码为“mypassword”,它将存储在一些随机字符串中,如'3ifdgk5ty = -dlsfs'。

读取sha1(md5不再被认为是安全的)。从来没有使用过crypt,但是sha1()似乎在与盐一起使用时为我做了工作(添加到密码中的附加文本字符串使得更难破解黑客)

答案 4 :(得分:-2)

你不能解密它,因为哈希是一种方式。所以你无法通过哈希获得原始输入。即使您有权访问数据库,也无法显示用户密码。

它被这样使用: 用户将密码写入输入 - >提交表格 - >密码进入数据库如下:

sha1($_POST['password']);

然后将此哈希密码存储在数据库中。

每当用户想要登录时,他再次提交表单,并且这个逻辑($result['password'])来自数据库查询:

if(sha1($_POST['password']) == $result['password']) {
  //password match, so lets log you -> set sessions, cookies and so on
}