【问题标题】:Sha1 generates different hash's from the same string in php when submitting from a different form当从不同的表单提交时,Sha1 从 php 中的相同字符串生成不同的哈希
【发布时间】:2011-03-06 21:42:35
【问题描述】:

所以我遇到了这个非常奇怪的问题。我有一个登录脚本,您输入用户名和密码。密码发布后,我使用 php 函数 sha1() 对其进行 sha1,并将其与数据库中的 sha1 版本进行比较。如果他们匹配它登录。那部分工作正常。现在我在移动版本上拥有相同的功能,但它使用不同的形式和不同的 URL。输入密码后,我会执行所有完全相同的步骤,但发布的 sha1 哈希与数据库中的 sha1 哈希不同。我知道我每次都输入完全相同的内容,所以我不明白为什么这两个值会不同。这仅适用于某些用户名/密码组合。我错过了什么吗??

【问题讨论】:

  • 您所说的“移动版”是什么意思?
  • 在散列之前检查以确保字符串实际上符合您的预期。哈希函数不能为相同的输入返回不同的结果。
  • 有要显示的代码吗?您确定 sha1-function 没有应用两次吗?等等等等。
  • 移动版和网页版是否使用相同的登录 PHP 脚本?相同的字段名称?
  • 注意不可见的字符,例如尾随回车。在 shaing 之前尝试在字符串上使用 trim()

标签: php forms codeigniter encryption sha1


【解决方案1】:

没有理由让相同的文本产生不同的 sha1 值。

我建议您在生成 sha1 之前记录真实密码值以调试问题。

我怀疑您可能输入了不同大小写的密码,或者由于某种原因被空格或其他字符填充。

【讨论】:

    【解决方案2】:

    我遇到了这个问题,我无法追踪它。事实证明,如果将输入字符串括在单引号中,则产生的结果与使用双引号不同。

    还要注意不同的编码问题

    例子

    $str = "test=!$E0";
    $enc = mb_detect_encoding($str, "UTF-8,ISO-8859-1");
    echo strtoupper(sha1(iconv($enc, "UTF-8",$str)));
    

    04CDF156D64CC4B51E1DC7E5A852F9177102EBE7

    $str = 'test=!$E0';
    $enc = mb_detect_encoding($str, "UTF-8,ISO-8859-1");
    echo strtoupper(sha1(iconv($enc, "UTF-8",$str)));
    

    44372F3C82A4AAD84748AE5ECB8F6C7313DA6C65

    很烦

    【讨论】:

    • 双引号中的 '$E0' 将被视为变量。 echo "test=!$E0" == 'test=!$E0'; 将生成 Notice</b>: Undefined variable: E0 参见 stackoverflow.com/questions/3446216/…test=!$E0 中删除 $ ,您将获得相同的哈希
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2021-09-21
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多