0

如何在客户端使用 md5 散列来保护从客户端 (JSP) 到服务器中的 Servlet 的密码传输?以下帖子似乎回答了这个问题,但由于代码块不完整,我无法完全理解。 http://www.techlabs4u.com/2010/03/how-to-use-salted-md5-hash-for-securing.html

4

4 回答 4

3

如何在客户端使用 md5 散列来保护从客户端 (JSP) 到服务器中的 Servlet 的密码传输?

你不能。

密码散列用于避免存储原始密码,以便在数据库受损时保护它们。(而且 MD5 坏了,所以无论如何你都不应该使用它)。

要保护传输中的密码,请使用 SSL(通过 HTTPS)。

于 2012-12-03T11:02:54.653 回答
0

对密码进行散列和加盐,然后以明文形式发送散列,与仅以明文形式发送密码相比,根本没有提供额外的安全性。如果攻击者能够拦截明文密码并使用它登录,那么他们可以轻松拦截散列密码并使用它登录。

不管客户端代码有多好,或者哈希算法有多强——这个原理从根本上是有缺陷的。

如前所述,使用 SSL。这不是以明文形式发送,而是加密客户端和服务器之间的所有传输,防止窃听。

于 2012-12-03T11:08:19.933 回答
0

如果您正在寻找 Java 和 JSP 中 MD5 加密的完整代码,这里就是。首先创建一个可以加密文本的 Java 类。我创建mdjavahash.java如下图。

package mdhash;

import java.security.*;

public class mdjavahash {
    private String hashpass="";

    public String getHashPass(String password) throws 
        NoSuchAlgorithmException{

        String plainText = password;
        MessageDigest mdAlgorithm = MessageDigest.getInstance("MD5");
        mdAlgorithm.update(plainText.getBytes());

        byte[] digest = mdAlgorithm.digest();
        StringBuffer hexString = new StringBuffer();

        for (int i = 0; i < digest.length; i++) {
            plainText = Integer.toHexString(0xFF & digest[i]);

            if (plainText.length() < 2) {
                plainText = "0" + plainText;
            }

            hexString.append(plainText);
        }
        hashpass = hexString.toString();

        return hashpass;
    }
}

现在您可以使用mdjavahashjsp 文件中的类进行加密。例如:

<%@ page import="java.security.*, mdhash.*" %>
<%
  String mypassword = "";

  mdjavahash md = new mdjavahash();

  mypassword = "Hello World";
  out.println("Actual String is : "+mypassword+" <br/>MD5 String is : 
  "+md.getHashPass(mypassword));
%>

您已经完成了 JSP 中的加密。

于 2018-05-01T05:14:36.633 回答
-4

如果您想在不使用 SSL 的情况下获得这样的中等安全性,请尝试以下方向:

  1. 读取当前时间
  2. 将时间与用户输入的密码连接起来
  3. 生成散列,md5只是你可以选择的散列算法之一,不是强制性的。
  4. 将所有用户名、时间戳和哈希发送到服务器。

在服务器端

  1. 收集三个 POST 变量
  2. 检查时间戳,仅接受可接受的时差
  3. 从数据库中检索密码
  4. 在服务器端以相同的方式计算哈希
  5. 将计算结果与 POST 哈希进行比较

缺点:您需要在服务器端保留纯文本密码

替代方案:预散列密码,并在登录期间在 javascript 端进行双重散列。

于 2012-12-03T11:13:59.850 回答