当从不同的表单提交时,Sha1 从 php 中的同一字符串生成不同的哈希值

发布于 2024-10-20 20:17:29 字数 258 浏览 1 评论 0原文

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

So I have this really weird problem. I have a login script and you type in a username and password. Once the password is posted i sha1 it with the php function sha1() and compare that to the sha1 version in the database. If they match it logs in. That part works fine. Now I have the same functionality for a mobile version, but it uses a different form and a different URL. After you type in the password I do all the exact same steps, but the sha1 hash that is posted is different than the sha1 hash in the database. I know I type them in exactly the same each time, so I don't see why the two values would be different. This is only true for some username / password combination. Am I missing something??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

々眼睛长脚气 2024-10-27 20:17:29

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

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

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

There is no reason for the same text produce different sha1 values.

I suggest you log the real password values before the sha1 is generated to debug the problem.

I suspect that you may be entering passwords with different case or are padded with spaces or other characters for some reason.

生生漫 2024-10-27 20:17:29

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

还要注意不同的编码问题

示例

$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

非常烦人

I ve had this problem and i could not trace it. It turns out that if you enclose the input string in sigle quotes yields different results than with double quotes.

Also watch out for different encoding issues

Example

$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

Very annoying

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文