0

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

所以它得到了MD5的“实例”。我猜那是MD5算法?然后它更新字节。为什么这样做?然后它使用 md.digest() 创建一个变量字节 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;
    }
4

1 回答 1

2

md.update(bytes)只是把字节通过MD5。 byte[] b = md.digest()将 MD5 哈希的结果作为一系列字节取出。

然后整个其余代码是将字节转换为十六进制字符串的一种非常尴尬的方式。

于 2016-04-18T20:53:22.593 回答