【问题标题】:sha1 is not working in password encryptionsha1 在密码加密中不起作用
【发布时间】:2015-12-09 15:19:08
【问题描述】:

我正在使用 sha1 加密来加密我的密码,但我遇到了问题。对于某些用户,登录无效。

我的代码,(在注册中)

// all validation is done here
$password = sha1($_POST['password']);

// inserting data is here

登录时我的查询是

$email     = $_POST['email'];
$password  = sha1($_POST['password']);

select * from users where email = $email and password = $password and status = 1 and deleted = 0;

其中一位用户面临密码问题,

我$$人

我是不是做错了什么。

请帮帮我。

【问题讨论】:

  • 我猜,你应该对所有用户有问题,而不是这个代码的一个,因为这个代码在选择查询之前没有 sha1 散列到$_POST['password']。因此,理想情况下,您的任何用户都不应该对查询结果感到满意。
  • 我忘记在此处添加...但它仅适用于少数用户...

标签: php sha password-hash


【解决方案1】:

我正在使用 sha1 加密来加密我的密码,

不。 SHA1 不是加密,它是一个散列函数。 Understanding the difference between encrypting and hashing 对于安全实施这一点至关重要:

此外,您编写查询的方式让我相信它容易受到SQL injection 的攻击。

【讨论】:

  • 那篇关于 Adob​​e 的文章读起来很不错,即使是几年前的文章。还好我从未成为 Adob​​e 客户!
【解决方案2】:

问题就在这里,

sha1 将 im$$man 中的 $man 视为变量,因此它将被评估为 null,因为您对此没有任何值。

类似的东西,

sha1("im$$man");// will echo 17cf5ec2752a9a7f0077c904f60b64f23ba2534d

也等于

sha1("im$");// will echo 17cf5ec2752a9a7f0077c904f60b64f23ba2534d
$man is evaluated to null.

两个输入的输出相同(虽然输入不同)

要获得预期的结果,请避免使用双引号,

sha1('im$$man');// this will give correct output

输出是

850caa44549443778fe005f466766d5d6d413692// correct output.

md5() here 的类似问题

【讨论】:

  • 其实我是直接从$_POST取值的。
  • 谢谢您,先生...问题出在生成带有双 $ 的密码。我在忘记密码时生成密码。如果我得到 2 美元,我就会遇到这个问题。非常感谢先生。我也看到了另一个答案。你是天才,谢谢先生...
  • 是的...你需要在生成密码时注意双$符号...并且还要使用单引号...
  • 很高兴能帮到你:)
猜你喜欢
  • 2011-03-03
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多