messagedigest decrypt android hash sha256

android - decrypt - sha256 java



¿Cómo puedo calcular el hash SHA-256 de una cadena con una clave secreta en Android? (1)

Necesito calcular un hash SHA-256 de una cadena con una clave secreta. Encontré este código:

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

para calcular el hash sin la clave secreta. ¿Cómo puedo calcular con una clave secreta? Busqué pero no encontré ninguna solución en Android. Alguna idea ?


Mira este ejemplo.

/** * 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); } }

Donde HASH_ALGORITHM se define como:

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