MessageDigest 的两种更新方法之间的真正区别是什么?
The real difference between the MessageDigest`s two update methods?
示例一:
FileInputStream fis = new FileInputStream(path);
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
例子二:
FileInputStream fis = new FileInputStream(path);
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
while ((fis.read(buffer)) != -1) {
digest.update(buffer);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
在上面两个例子中,我使用了两种不同的更新方式。当我传递相同的文件路径时,这两个操作return 两个不同的结果。 update方法是append模式吗?为什么我得到不同的结果?
第一个有效,第二个无效。 read
不一定填满缓冲区,但在第二个示例中,您始终将所有字节发送到摘要。
示例一:
FileInputStream fis = new FileInputStream(path);
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
例子二:
FileInputStream fis = new FileInputStream(path);
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1024];
while ((fis.read(buffer)) != -1) {
digest.update(buffer);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
在上面两个例子中,我使用了两种不同的更新方式。当我传递相同的文件路径时,这两个操作return 两个不同的结果。 update方法是append模式吗?为什么我得到不同的结果?
第一个有效,第二个无效。 read
不一定填满缓冲区,但在第二个示例中,您始终将所有字节发送到摘要。