gpt4 book ai didi

passwords - PHP的password_hash编码用于HTTP基本认证

转载 作者:行者123 更新时间:2023-12-02 16:23:09 26 4
gpt4 key购买 nike

我的问题:

我需要通过 HTTP 进行基本身份验证(客户端无法负担 HTTPS)。所以我不担心通信是否未加密。我只是想防止某些用户嗅探和使用密码(网站仅用于上传照片,并且这些照片是公开的。)。

我可以使用的工具箱:

  1. Javascript
  2. PHP
  3. Sha512.js

PHP 和 JS 中的 SHA 算法是相同的:

证明:(?)

<?php 
$password= "password";
echo hash('sha512',$password);
//outputs: b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
?>

在 JS 中(我的所有文件都以 utf8 编码)

document.getElementById("hiddenField").value
= JS.sha512("password");
//outputs b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86

但是我不能简单地在每个连接上发送相同的哈希值,否则任何人都可以嗅探它并将其发送到连接。

所以我的想法是使用 password_hash() 函数作为盐生成器。

盐是公开的,(密码+盐)的哈希值是公开的,但密码是私有(private)的,并且永远不会以明文形式发送:服务器将计算(希望)与客户端 JS 中的哈希值相同的哈希值并进行验证两个哈希值匹配。

问题是,无论我做什么,当我散列该函数的输出(password_hash)时,我都无法获得相同的输出。好像和编码有关。

我想使用password_hash(),因为它已经考虑了很多安全问题:

Javascript:

document.getElementById("hiddenField").value
= JS.sha512("password" + document.getElementById("publicToken").value);

我将“password_hash”内容放入另一个隐藏的表单字段中,我称之为“publicToken”。无论我做什么,我都无法获得哈希匹配:

<?php 
$salt = ut8_encode(password_hash("another_password")); //doesn't work either

最后,我需要做什么才能获得正确编码的盐?

<?php
$salt = //... one time usage salt.. but what to put here?

最佳答案

我知道您的客户买不起标准的 HTTPS 证书,但说实话,即使是免费的 SSL 证书也可能比您在这里编造的证书要好得多。

在这种情况下,您所做的就是将浏览器端哈希值设置为用户的密码,而要进入,只需发送匹配的哈希值即可。如果您决定这样做,您肯定需要在服务器端再次对密码进行哈希处理,但它仍然无法替代 SSL。

更多信息请点击:https://crackstation.net/hashing-security.htm

关于passwords - PHP的password_hash编码用于HTTP基本认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com