java - 消息摘要哈希MD5

标签 java spring spring-security

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

当我使用 Spring 框架中的 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

关于java - 消息摘要哈希MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15219135/

相关文章:

java - 无法从正在编写的 Java 文档中复制间接对象

java - moveToElement() 执行悬停操作

java.lang.NoSuchMethodException : Unknown property ' activePackage'

java - Spring Security + LDAP 总是返回 BadCredentialsException

java - 使用 JUnit 测试 Spring 安全性时如何删除 "ROLE_"前缀?

java - 如何修复使用 Thymeleaf 调用 Java 方法?

java - 二叉树的递归插入

java - Spring Security OAuth Java 配置

java - Gradle - 从依赖项中排除 spring.xml

spring - 使用 RabbitMQ 的 Spring Cloud Stream 消费者的多个 bindingRoutingKey