Android,从文件计算SHA-1哈希值,最快的算法

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

有什么好的方法可以提高性能吗?


你正在读取的文件大小是多少? - SirDarius
尝试在不使用asHex(..)方法的情况下运行您的代码(只返回byte[])。 - Peter Knego
我正在使用6MB的文件,删除asHex(..)没有帮助:/ - Tomasz Wójcik
Donald_W,你用什么设备? - acoolaum
既然人们仍在为我的问题点赞,你应该使用我提出的实现方法或者DevProd的答案。我的主要问题是使用了非常老的设备(ADP1)。 - Tomasz Wójcik
2个回答

4

2
此链接已于2015年11月10日失效。 - keithbhunter
2017年的链接已经失效。 - jpros
1
这应该被踩,因为只是发布了外部链接,而没有在这里写答案。 - lukassos
链接在2021年已经失效。 - Francis Saa-Dittoh
被抄袭的 HexConversions.java 文件的原始源代码可以在原作者的网站上找到(不幸的是,现在需要身份验证才能访问)。可以在此处找到存档版本(最新的来自2017年):https://web.archive.org/web/20171115213622/http://www.idevelopment.info/data/Programming/java/io/HexConversions.java - Edric

1

如果我是你,我会像那个人一样使用JNI,从而提高速度。这正是C接口的用途。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接