2014-07-11 279 views
2

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

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.phptest1.php。我不知道如何解密文本请帮助我。

+1

你在这里谈论的是哈希,而不是加密。散列并不意味着是可逆的(即使MD5非常不安全并且可以将其颠倒)。你应该在服务器端重新哈哈哈哈和JS哈希比较,而不是试图扭转它。 –

+0

为什么不简单地使用md5来解密它,而是尝试将其反转或创建md5解密 – user2530266

+0

@orciny可以任何人指导我如何做到这一点。或任何示例 – VPR

回答

2

您希望保护正在监听网络流量的“中间人”中的明文密码。不幸的是,使用客户端java脚本不可能防止这种情况,因为攻击者可以看到发送的java脚本,并且也可以简单地从请求中删除这个脚本。

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

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

3

挂在这里一分钟。

这只是一个坏主意(我能想到其他形容词在这里,但会限制自己到坏)。

任何人都可以用任何浏览器阅读网页源代码,所以我看到了什么,如果我这样做....

  1. 我现在知道你正在使用MD5哈希数据库上的密码(我们忽略MD5现在有多糟糕)
  2. 而且你好,我也知道你正在使用的SALT

为什么不直接给我你的银行帐号和密码,以及衡量你的房子和汽车的钥匙!

我假设你没有船或者你现在已经淹死了!

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

+0

我只是为了学习目的这样做可以任何一个教我如何? – VPR

+1

但是我的观点是,除了这是一个非常糟糕的主意并且在任何系统中都没有任何地方之外,没有什么可以从你正在做的事情中学习。 – RiggsFolly

1

需要密码加密,因为密码跟踪将在您提交时存储在计算机上的浏览器内存中。如果黑客通过广泛使用的工具访问您的计算机,则您的存储数据将被公开。

解决方法是让黑客更难掌握您的密码......

有两两件事要记住: 1)通过形式 2提交)通过AJAX

提交在这两个套管它是您控制您提交的字符编码,并确保你的服务器的字符编码是非常重要的与您的应用程序网页同步。

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

一旦你有他们在控制之下,然后使用任何你想解码的语言的代码...然而,你需要保持在服务器端的salt和stringit的引用..你需要随机生成不同的集合您为用户提供的每个页面上的字符串。

要做到这一点的一种方法是将它们作为隐藏的输入包含在窗体中,但是您需要在允许表单继续提交之前从窗体中移除输入。