java - 有人可以解释一下这个 MD5 MessageDigest 代码是如何工作的吗?

标签 java md5 message-digest

我正在使用 MessageDigest 学习 MD5 和 SHA。这是我从类中获得的一段代码,它使用 MessageDigest 实现 MD5。我很难理解它。

这样就得到了MD5的“实例”。我猜这就是MD5算法?然后它更新字节。为什么要这样做?然后它用 md.digest() 创建一个变量 bytes b ,但我也不知道为什么它这样做?然后我认为它使用 for 语句来执行算法,并且可能会填充它(附加 0?)。如果有人能解释得更好一点,我将不胜感激!

   try {
                MessageDigest md = MessageDigest.getInstance("MD5"); // get the
                                                                        // instance
                                                                        // of md5
            md.update(bytes); // get the digest updated
            byte[] b = md.digest(); // calculate the final value
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            message = buf.toString(); // output as strings

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace(); // when certain algorithm is down, output the
                                    // abnormal condition
        }
        return message;
    }

最佳答案

md.update(bytes) 只是将字节通过 MD5。 byte[] b = md.digest() 以一系列字节的形式获取 MD5 哈希结果。

然后,整个代码的其余部分都是将字节转换为十六进制字符串的极其尴尬的方式。

关于java - 有人可以解释一下这个 MD5 MessageDigest 代码是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36704027/

相关文章:

java - 在 Java 中连接到 LDAP Active Directory,无需用户名和密码

java - 如何让oracle db支持md5加密?

python - 将 Snowflake MD5 与 Python MD5 匹配

java - 如何使用 JavaFX 和 FXML 创建关闭按钮

java - 从另一个联接创建的列上的 JoinColumn

java - 如何使用消息摘要类的update方法

java - 为什么 BouncyCaSTLe Keccak sha-384 和 MessageDigest sha-384 有不同的输出?

mysql - MySQL 中的 url 安全 base64

java - 声音停止播放后替换 android/Java 中的图像

Scala 单线从字符串生成 MD5 哈希