【发布时间】:2015-02-06 18:32:27
【问题描述】:
我有一个获取 zip 文件的 md5 校验和的 Android 应用程序。我用它来比较文件和服务器上的文件。我的问题是每次我尝试为同一个文件生成 md5 时,校验和都是不同的。我在这里发布我的方法。你能告诉我有什么问题吗?
private static String fileMD5(String filePath) throws NoSuchAlgorithmException, IOException {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
byte[] buffer = new byte[1024];
MessageDigest digest = MessageDigest.getInstance("MD5");
int numRead = 0;
while (numRead != -1) {
numRead = inputStream.read(buffer);
if (numRead > 0)
digest.update(buffer, 0, numRead);
}
byte [] md5Bytes = digest.digest();
return convertHashToString(md5Bytes);
} catch (Exception e) {
return "ERROR";
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) { }
}
}
}
private static String convertHashToString(byte[] md5Bytes) {
String returnVal = "";
for (int i = 0; i < md5Bytes.length; i++) {
returnVal += Integer.toString(( md5Bytes[i] & 0xff ) + 0x100, 16).substring(1);
}
return returnVal;
}
【问题讨论】:
-
我在您的代码中没有看到任何内容来解释为什么您会得到不同的结果。最可能的解释是您的数据因运行而异。即使您将该方法指向相同的文件名,如果在运行之间以任何方式修改文件内容,您也会得到不同的结果。
-
您的代码看起来不错...我建议您先检查一下您是否总是从文件中读取相同数量的字节。
-
好的,谢谢。我会尝试:)
-
我打印了字节数,每次都一样..
标签: java android md5 message-digest md5-file