How can I calculate the SHA-256 hash of a string in Android? How can I calculate the SHA-256 hash of a string in Android? android android

How can I calculate the SHA-256 hash of a string in Android?


The PHP function bin2hex means that it takes a string of bytes and encodes it as a hexadecimal number.

In the Java code, you are trying to take a bunch of random bytes and decode them as a string using your platform's default character encoding. That isn't going to work, and if it did, it wouldn't produce the same results.

Here's a quick-and-dirty binary-to-hex conversion for Java:

static String bin2hex(byte[] data) {    StringBuilder hex = new StringBuilder(data.length * 2);    for (byte b : data)        hex.append(String.format("%02x", b & 0xFF));    return hex.toString();}

This is quick to write, not necessarily quick to execute. If you are doing a lot of these, you should rewrite the function with a faster implementation.


You are along the right lines, but converting the bytes is a little more complicated. This works on my device:

// utility function    private static String bytesToHexString(byte[] bytes) {        // http://stackoverflow.com/questions/332079        StringBuffer sb = new StringBuffer();        for (int i = 0; i < bytes.length; i++) {            String hex = Integer.toHexString(0xFF & bytes[i]);            if (hex.length() == 1) {                sb.append('0');            }            sb.append(hex);        }        return sb.toString();    }// generate a hash    String password="asdf";    MessageDigest digest=null;    String hash;    try {        digest = MessageDigest.getInstance("SHA-256");        digest.update(password.getBytes());        hash = bytesToHexString(digest.digest());        Log.i("Eamorr", "result is " + hash);    } catch (NoSuchAlgorithmException e1) {        // TODO Auto-generated catch block        e1.printStackTrace();    }

Source: bytesToHexString function is from the IOSched project.


Complete answer with use example, thanks to erickson.

Put this into your "Utils" class.

public static String getSha256Hash(String password) {    try {        MessageDigest digest = null;        try {            digest = MessageDigest.getInstance("SHA-256");        } catch (NoSuchAlgorithmException e1) {            e1.printStackTrace();        }        digest.reset();        return bin2hex(digest.digest(password.getBytes()));    } catch (Exception ignored) {        return null;    }}private static String bin2hex(byte[] data) {    StringBuilder hex = new StringBuilder(data.length * 2);    for (byte b : data)        hex.append(String.format("%02x", b & 0xFF));    return hex.toString();}

Example of use:

Toast.makeText(this, Utils.getSha256Hash("123456_MY_PASSWORD"), Toast.LENGTH_SHORT).show();