我在 Android 上遇到 SHA-1 性能问题。在 C# 中,我在大约 3 秒内得到计算的哈希,Android 的相同计算大约需要 75 秒。我认为问题出在从文件中读取操作,但我不确定如何提高性能。
这是我的哈希生成方法。
private static String getSHA1FromFileContent(String filename)
{
try
{
MessageDigest digest = MessageDigest.getInstance("SHA-1");
//byte[] buffer = new byte[65536]; //created at start.
InputStream fis = new FileInputStream(filename);
int n = 0;
while (n != -1)
{
n = fis.read(buffer);
if (n > 0)
{
digest.update(buffer, 0, n);
}
}
byte[] digestResult = digest.digest();
return asHex(digestResult);
}
catch (Exception e)
{
return null;
}
}
有什么办法可以提高性能吗?
最佳答案
我在我的 SGS (i9000) 上对其进行了测试,为一个 10.1MB 的文件生成哈希值需要 0.806 秒。
唯一不同的是,在我的代码中,除了 FileInputStream 和十六进制转换库之外,我还使用了 BufferedInputStream:
http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html
此外,我建议您在 finally 子句中关闭文件输入流
关于Android,从文件计算 SHA-1 哈希,最快的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564643/