I'm trying to get the SHA256 of a string in Android.
Here is the PHP code that I want to match:
echo bin2hex(mhash(MHASH_SHA256,"asdf")); //outputs "f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13b" Now, in Java, I'm trying to do the following:
String password="asdf" MessageDigest digest=null; try { digest = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } digest.reset(); try { Log.i("Eamorr",digest.digest(password.getBytes("UTF-8")).toString()); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } But this prints out: "a42yzk3axdv3k4yh98g8"
What did I do wrong here?
Solution thanks to erickson:
Log.i("Eamorr",bin2hex(getHash("asdf"))); public byte[] getHash(String password) { MessageDigest digest=null; try { digest = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } digest.reset(); return digest.digest(password.getBytes()); } static String bin2hex(byte[] data) { return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data)); }
getBytes()without specifying the encoding?