java - MySQL SHA256 和 Java MessageDigest SHA-256 不匹配

标签 java mysql encryption comparison sha256

我一直在尝试加密项目中的一些用户密码,但我似乎无法让它正常工作。我决定使用 SHA-256 算法,当我使用 Sha2(Example,256) 向 MySQL 引入密码时,它会在加密密码中添加两个零。在 Java 中我使用了 this对程序中的文本进行哈希处理,但无法获得相同的结果。

    try {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest("ContrasenhaPassword".getBytes("UTF-8"));

        StringBuilder hexString = new StringBuilder();
        for (int i: hash) {
            hexString.append(Integer.toHexString(0XFF & i));
        }
        String Hashed = new String(hexString);
        System.out.println(hexString);
        System.out.println(Hashed);
        // Below, MySQL Output for SHA2('ContrasenhaPassword',256)
        System.out.println("d17bf0da90f56b8fc627bac6523ffd284aa0d82c870e1a0428274de048f49d78");
        System.out.println(Hashed.equals(hexString));
        } catch (Exception e) {
        e.printStackTrace();
        }

我得到的输出是:

        d17bf0da90f56b8fc627bac6523ffd284aa0d82c87e1a428274de048f49d78
        d17bf0da90f56b8fc627bac6523ffd284aa0d82c87e1a428274de048f49d78
        d17bf0da90f56b8fc627bac6523ffd284aa0d82c870e1a0428274de048f49d78
        false 
        BUILD SUCCESSFUL (total time: 0 seconds)

有什么想法吗?

最佳答案

不同之处在于打印它们的方式:

for (int i: hash) {
  hexString.append(Integer.toHexString(0XFF & i));
}

去掉前导零,所以有一个字节被格式化为“e”而不是“0e”。可能最简单的选择是

for (int i: hash) {
  hexString.append(String.format("%02x", i));
}

或者,如果您可以使用 Guava , 整个事情可以更简单地完成

Hashing.sha256().hashString("ContrasenhaPassword", Charsets.UTF_8).toString()

它在一行中为您提供(正确格式化的)十六进制编码的 SHA-256 哈希值。

关于java - MySQL SHA256 和 Java MessageDigest SHA-256 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994115/

相关文章:

java - Android 本地通知不适用于三星 Galaxy

mysql - 是否可以将 mdb 数据库连接到 MySQL 数据库

c - 产品 key 的实现

java - 解密时出现 IllegalBLockSizeException

java - 代码重构过程

java - 用于在 android 中读取 SRT 文件的正则表达式

php - 查找具有相同值的列数

python - 逆向加密算法,将字符串中的每个字符与另一个字符进行异或,使用奇偶校验来控制偏移量

java - 使用 Arrays.sort() 和 Arrays.binarySearch() 获取存储在数组中的整数列表

php - Mysql 更新数据时出现问题( fatal error : Uncaught Error: Call to a member function)