首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中使用md5.js进行客户端密码加密和解密

在PHP中使用md5.js进行客户端密码加密和解密
EN

Stack Overflow用户
提问于 2014-07-11 08:48:10
回答 3查看 11.1K关注 0票数 2

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

test.php

代码语言:javascript
复制
<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。我不知道怎么解密文本,请帮帮我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-11 18:19:41

您希望保护明文密码不受监听网络流量的“中间人”的攻击。不幸的是,使用客户端java-script无法阻止这一点,因为攻击者也可以看到发送的java- script,并且还能够简单地从请求中删除此脚本。

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

客户端散列也可以有它的用途,但永远不会取代服务器端散列。您可以将用于哈希的CPU功率转移到客户端。在服务器端,您将不得不再次进行散列,但循环次数较少。

票数 2
EN

Stack Overflow用户

发布于 2014-07-11 09:19:14

请稍等片刻。

这只是一个糟糕的想法,(我可以在这里想到其他形容词,但只限于坏)。

任何人都可以用任何浏览器阅读你的页面源代码,那么如果我这样做了,我会看到什么呢……

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

为什么不直接给我你的银行账号和个人识别码,还有你房子和汽车的钥匙呢?

我猜你没有船,要不然你现在就已经被水淹没了!

不要试图在浏览器中执行此操作,唯一安全的方法是使用SSL。

票数 3
EN

Stack Overflow用户

发布于 2015-08-13 04:00:14

需要密码加密,因为当您提交时,密码跟踪将存储在您计算机上的浏览器内存中。如果黑客使用广泛可用的工具进入您的计算机,您存储的数据将被暴露。

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

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

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

如果您不控制编码,那么您的ajax调用可能会以与通过表单提交的编码不同的编码结束,因此解码将不容易。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24688539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档