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

时间:2016-04-18 20:49:23

标签: java md5 message-digest

我正在使用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;
    }

1 个答案:

答案 0 :(得分:2)

md.update(bytes)只是将字节放在MD5中。 byte[] b = md.digest()将MD5哈希的结果作为一系列字节输出。

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