13

I have a problem with SHA-1 performance on Android. In C# I get calculated hash in about 3s, same calculation for Android takes about 75s. I think the problem is in reading operation from file, but I'm not sure how to improve performance.

Here's my hash generation method.

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

Any ideas how can I improve performance?

5
  • what's the size of the file you are reading ? Commented Apr 6, 2011 at 10:18
  • Try running your code without asHex(..) method (just return byte[]). Commented Apr 6, 2011 at 10:25
  • I'm using 6MB file, removing asHex(..) haven't helped :/ Commented Apr 6, 2011 at 12:40
  • Donald_W, what kind of device do U use? Commented Apr 3, 2012 at 13:33
  • Since people still upvote my question you should use the implementation from my question or DevProd's answer. My main issue was using very old device (ADP1). Commented Jun 2, 2014 at 16:49

2 Answers 2

4

I tested it on my SGS (i9000) and it took 0.806s to generate the hash for a 10.1MB file.

Only difference is that in my code i am using BufferedInputStream in addition to the FileInputStream and the hex conversion library found at:

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

Also I would suggest that you close your file input stream in a finally clause

Sign up to request clarification or add additional context in comments.

5 Comments

This link is broken as of 11/10/15.
Link is broken in 2017.
Dam this should be down voted just for posting an external url instead of writing answer here.
Link is broken in 2021
The original source code of the plagiarised HexConversions.java file can be found on the original author's website (which unfortunately appears to now require authentication to access). An archived version (latest from 2017) can be found here: web.archive.org/web/20171115213622/http://www.idevelopment.info/…
1

If I were you I would use the JNI like this guy did and get the speed up that way. This is exactly what the C interface was made for.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.