Android, вычисляющий хеш SHA-1 из файла, самый быстрый алгоритм - PullRequest
12 голосов
/ 06 апреля 2011

У меня проблема с производительностью SHA-1 на Android. В 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;
        }
    }

Любые идеи, как я могу улучшить производительность?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Я протестировал его на своем SGS (i9000), и потребовалось 0,806 с, чтобы сгенерировать хэш для файла размером 10,1 МБ.

Единственное отличие состоит в том, что в моем коде я использую BufferedInputStream в дополнение к FileInputStream ибиблиотека шестнадцатеричного преобразования, найденная по адресу:

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

Также я бы посоветовала вам закрыть поток ввода файлов в предложении finally

1 голос
/ 14 июня 2011

На вашем месте я бы использовал JNI, как этот парень , и таким образом увеличил бы скорость.Это как раз то, для чего был создан интерфейс C.

...