客户端密码加密使用md5.js,解密在PHP

Client side password encryption using md5.js and decryption in PHP

本文关键字:解密 PHP js md5 密码 加密 密使 客户端      更新时间:2023-09-26

我使用具有userpassword字段的表单,因为我需要在将表单发送到服务器进行验证之前加密密码。为此,我使用md5.js在客户端使用盐信息进行加密。

test.php

<script LANGUAGE="Javascript" SRC="js/md5.js"></script>
<script>
    function encryptPwd1(strPwd, strSalt, strit) {
        var strNewSalt = new String(strSalt);
        if (strPwd == "" || strSalt == "")
        {
            return null;
        }
        var strEncPwd;
        var strPwdHash = MD5(strPwd);
        var strMerged = strNewSalt + strPwdHash;
        var strMerged1 = MD5(strMerged);
        return strMerged1;
    }
    function validateForm(strSalt, strit) {
        var strEncPwd = new String(encryptPwd1(document.getElementById("password").value, strSalt, strit));
        document.getElementById("password").value = strEncPwd;
        document.login.submit();
        return true;
    }
</script>
<form method="post" action="test1.php">
    <input type="hidden" 
           name="salt"
           id="salt"
           value="8qadr4xnCPW275BaNpYX">
    <label class="login">Password:</label>
    <input
        name="password"
        id="password"
        type="password" />
    <input type="submit"
        name="gos"
        id="gos"
        value="Login"
        onClick="return validateForm('8qadr4xnCPW275BaNpYX','38');">
</form>

这是包含使用JavaScript和md5.js的客户端加密的表单。我可以成功地加密消息并将其发送到test1.php中的test1.php。我不知道如何解密这个文本,请帮助我。

请稍等。

这是一个坏主意(我可以想到其他形容词,但仅限于坏)。

任何人都可以用任何浏览器读取你的页面源代码,所以如果我这样做会看到什么....

  1. 我现在知道你正在使用MD5来散列你的数据库上的密码(让我们忽略MD5现在有多糟糕)
  2. 你瞧,我还知道你正在使用的SALT !

为什么不直接给我你的银行账号和密码,还有你家和车的钥匙呢?

我想你没有船,否则你现在已经淹死了!

不要尝试在浏览器中这样做,唯一安全的方法是使用SSL。

您希望保护纯文本密码不受"中间 man"的攻击,该man正在侦听网络流量。不幸的是,使用客户端java脚本无法防止这种情况,因为攻击者也可以看到发送的java脚本,并且还可以简单地从请求中删除该脚本。

保护密码传输的唯一可靠方法是使用带SSL加密的HTTPS。这也只适用于已经共享了秘密(浏览器中安装的证书)的情况。

客户端哈希也可以有它的目的,但永远不能取代服务器端哈希。您可以将用于散列的CPU功率转移到客户端。在服务器端,您将不得不再次散列,但使用更少的轮数。

密码加密是需要的,因为密码跟踪将存储在您的计算机上的浏览器内存中,当您提交。如果黑客用一种随处可见的工具进入你的电脑,你存储的数据就会暴露。

解决这个问题的方法是让黑客更难获得你的密码…

有两件事要记住:1)通过表格提交2)通过ajax提交

在这两种情况下,重要的是你要控制你提交的字符编码,并确保你的服务器字符编码与你的应用程序网页同步。

如果你不控制编码,那么你的ajax调用可能最终与你通过表单提交的编码集不同,因此你的解码将不容易。

一旦你控制了它们,然后使用你想解码的任何语言的代码…但是,您需要在服务器端保留salt和stringit的引用。您需要在提供给用户的每个页面上随机生成不同的字符串集。

一种方法是将它们作为隐藏输入包含在表单中。但是,在允许表单继续提交之前,需要动态地从表单中删除输入。