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

26,025

Look at this example.

/**
 * Encryption of a given text using the provided secretKey
 * 
 * @param text
 * @param secretKey
 * @return the encoded string
 * @throws SignatureException
 */
public static String hashMac(String text, String secretKey)
  throws SignatureException {

 try {
  Key sk = new SecretKeySpec(secretKey.getBytes(), HASH_ALGORITHM);
  Mac mac = Mac.getInstance(sk.getAlgorithm());
  mac.init(sk);
  final byte[] hmac = mac.doFinal(text.getBytes());
  return toHexString(hmac);
 } catch (NoSuchAlgorithmException e1) {
  // throw an exception or pick a different encryption method
  throw new SignatureException(
    "error building signature, no such algorithm in device "
      + HASH_ALGORITHM);
 } catch (InvalidKeyException e) {
  throw new SignatureException(
    "error building signature, invalid key " + HASH_ALGORITHM);
 }
}

Where HASH_ALGORITHM is defined as:

private static final String HASH_ALGORITHM = "HmacSHA256";

public static String toHexString(byte[] bytes) {  
    StringBuilder sb = new StringBuilder(bytes.length * 2);  

    Formatter formatter = new Formatter(sb);  
    for (byte b : bytes) {  
        formatter.format("%02x", b);  
    }  

    return sb.toString();  
}  
Share:
26,025
Gabrielle
Author by

Gabrielle

Updated on July 05, 2022

Comments

  • Gabrielle
    Gabrielle almost 2 years

    I need to calculate a SHA-256 hash of a string with a secret key. I found this code :

    public String computeHash(String input)
        throws NoSuchAlgorithmException, UnsupportedEncodingException
    {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        digest.reset();
    
        byte[] byteData = digest.digest(input.getBytes("UTF-8"));
        StringBuffer sb = new StringBuffer();
    
        for (int i = 0; i < byteData.length; i++) {
            sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }
        return sb.toString();
    }
    

    for calculating the hash without the secret key. How can I calculate with a secret key? I searched but I didn't find any solution in Android. Any idea ?

  • Gabrielle
    Gabrielle almost 12 years
    Which is the method toHexString()?
  • Swift
    Swift over 10 years
    Let me know : How can I calculate the SHA-1 hash of a String with a Secret key in android ?
  • Zeeshan
    Zeeshan almost 10 years
    how can i reverse from Hash string to original String ? Any idea thanks
  • Sayo Oladeji
    Sayo Oladeji over 8 years
    @ShanXeeshi You're out of luck there. A hash is a one-way digest; it cannot be "reversed" to get the original text. Sorry.
  • user924
    user924 over 4 years
    there is no secret key