13

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

任何想法如何提高性能?

4

2 回答 2

4

我在我的 SGS (i9000) 上对其进行了测试,生成一个 10.1MB 文件的哈希需要 0.806 秒。

唯一的区别是,在我的代码中,除了 FileInputStream 和在以下位置找到的十六进制转换库之外,我还使用了 BufferedInputStream:

http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html

另外我建议您在 finally 子句中关闭文件输入流

于 2012-04-03T08:39:13.053 回答
1

如果我是你,我会像这个人那样使用 JNI并以这种方式加快速度。这正是 C 接口的用途。

于 2011-06-14T01:29:10.863 回答