Why are my Java and SHA256 command line different?

I get different results from hashing the command line against Java against Android. I am sure that I am doing something wrong, but I do not see that.

Command line:

kevin@aphrodite :~$ echo derp | sha256sum ee673d13de31533a375b41d9e57731d9bb4dbddbd6c1d2364f15be40fd783346 - 

Java:

 final String plaintext = "derp"; final MessageDigest md; try { md = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e) { /* SHA-256 should be supported on all devices. */ throw new RuntimeException(e); } final String inputHash = bytesToHex(md.digest(plaintext.getBytes())); Log.debug(TAG, "input hash: " + inputHash); 

Java output:

 10-05 13:32:57.412: D/Config(12082): input hash: 3f4146a1d0b5dac26562ff7dc6248573f4e996cf764a0f517318ff398dcfa792 

Here's the bytesToHex(...) method that I found in another Q & A. I confirmed that it does the right thing by registering Integer.toHexString(b) for each b .

 private static final char[] hexDigit = "0123456789abcdef".toCharArray(); private static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; for (int i = 0; i < bytes.length; ++i) { int b = bytes[i] & 0xFF; hexChars[i * 2] = hexDigit[b >>> 4]; hexChars[i * 2 + 1] = hexDigit[b & 0x0F]; } return new String(hexChars); } 
+7
java sha256
source share
1 answer

Because echo contains a trailing newline. you can use

 echo -n derp | sha256sum 

or add \n to plaintext as

 final String plaintext = "derp\n"; 
+10
source share

All Articles