[英]Getting MD5 Hash of File from URL
我得到的结果是相同类型的文件返回相同的md5哈希值。 例如,两个不同的jpgs给了我相同的结果。 但是,jpg vs apk正在给出不同的结果。
这是我的代码......
public static String checkHashURL(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new URL(input).openStream();
try {
is = new DigestInputStream(is, md);
int b;
while ((b = is.read()) > 0) {
;
}
} finally {
is.close();
}
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
sb.append(
Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(
1));
}
return sb.toString();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
这已破了:
while ((b = is.read()) > 0)
您的代码将在流的第一个字节处停止,如果这两个文件在前0字节之前具有相同的值,则您将失败。 如果你真的想调用一次一字节的read
版本,你需要:
while (is.read() != -1) {}
无参数的InputStream.read()
方法在到达流的末尾时返回-1。
(没有必要为b
分配值,因为你没有使用它。)
最好是一次读取一个缓冲区:
byte[] ignoredBuffer = new byte[8 * 1024]; // Up to 8K per read
while (is.read(ignoredBuffer) > 0) {}
这次条件有效,因为如果传入一个空缓冲区, InputStream.read(byte[])
只会返回0。 否则,它将尝试读取至少一个字节,返回读取的数据长度,或者如果已到达流的末尾则返回-1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.