Java 消息摘要哈希MD5

Java 消息摘要哈希MD5,java,spring,spring-security,Java,Spring,Spring Security,我正在尝试获取字符串“password”的MD5哈希值 当我使用Spring framework中的MD5PasswordEncoder类时,我得到以下信息: 5f4dcc3b5aa765d61d8327deb882cf99 但是,当我将Java的MessageDigest类与MD5一起使用时,我得到了以下信息: 9577-525990-89101-4229-12539-34-72-126-49-103 第一个是十六进制,另一个是十进制。为什么会有区别?代码如下: public static v

我正在尝试获取字符串
“password”
的MD5哈希值

当我使用Spring framework中的
MD5PasswordEncoder
类时,我得到以下信息:

5f4dcc3b5aa765d61d8327deb882cf99

但是,当我将Java的
MessageDigest
类与MD5一起使用时,我得到了以下信息:

9577-525990-89101-4229-12539-34-72-126-49-103

第一个是十六进制,另一个是十进制。为什么会有区别?代码如下:

public static void main(String[] args)  {
    PasswordEncoder pEncoder = new Md5PasswordEncoder(); 
    System.out.println(pEncoder.encodePassword("password", null));

    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update("password".getBytes("UTF-8"));
        byte [] digest = md.digest();
        StringBuffer sb = new StringBuffer();
        for (byte b : digest) {
            sb.append(b);
        }
        System.out.println(sb.toString());

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

问题是你的打印功能。以下代码打印与Spring应用程序相同的值:

public static void main(String[] args) {

  try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update("password".getBytes("UTF-8"));
    byte[] digest = md.digest();
    System.out.println(DatatypeConverter.printHexBinary(digest));

  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
  } catch (UnsupportedEncodingException e) {   
    e.printStackTrace();
  }
}
印刷品:

5F4DCC3B5AA765D61D8327DEB882CF99


问题是你的打印功能。以下代码打印与Spring应用程序相同的值:

public static void main(String[] args) {

  try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update("password".getBytes("UTF-8"));
    byte[] digest = md.digest();
    System.out.println(DatatypeConverter.printHexBinary(digest));

  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
  } catch (UnsupportedEncodingException e) {   
    e.printStackTrace();
  }
}
印刷品:

5F4DCC3B5AA765D61D8327DEB882CF99

试一试

你会得到

5f4dcc3b5aa765d61d8327deb882cf99
试一试

你会得到

5f4dcc3b5aa765d61d8327deb882cf99

问题在于Java MessageDigest的输出转换为字符串的方式

试一试


将字节转换为十六进制。

问题在于如何将Java消息摘要的输出转换为字符串

试一试


将字节转换为十六进制。

我认为您没有添加问题。如果问题是它们为什么不同,我的答案是:你读过这两个类的文档了吗?除了值非常不同之外,还有什么问题?是的,问题是它们为什么不同。我想你没有补充一个问题。如果问题是它们为什么不同,我的答案是:你读过这两个类的文档吗?如果它们的值非常不同,那么问题是什么?是的,问题是它们为什么不同。