¿Cómo codificar una cadena con SHA-256 en Java?

Resuelto Ivana asked hace 13 años • 18 respuestas

¿ Cómo puedo codificar algunos Stringen SHA-256Java?

Ivana avatar Apr 04 '11 01:04 Ivana
Aceptado

SHA-256 no es una "codificación", es un hash unidireccional.

Básicamente, convertirías la cadena en bytes (por ejemplo, usando text.getBytes(StandardCharsets.UTF_8)) y luego codificarías los bytes. Tenga en cuenta que el resultado del hash también serían datos binarios arbitrarios, y si desea representarlos en una cadena, debe usar base64 o hexadecimal... no intente usar el String(byte[], String)constructor.

p.ej

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
Jon Skeet avatar Apr 03 '2011 18:04 Jon Skeet

Creo que la solución más sencilla es utilizar Apache Common Codec :

String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText);   
seba avatar Jul 13 '2013 22:07 seba

Hash de ejemplo completo para encadenar como otra cadena.

public static String sha256(final String base) {
    try{
        final MessageDigest digest = MessageDigest.getInstance("SHA-256");
        final byte[] hash = digest.digest(base.getBytes("UTF-8"));
        final StringBuilder hexString = new StringBuilder();
        for (int i = 0; i < hash.length; i++) {
            final String hex = Integer.toHexString(0xff & hash[i]);
            if(hex.length() == 1) 
              hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    } catch(Exception ex){
       throw new RuntimeException(ex);
    }
}
user1452273 avatar Jun 13 '2012 06:06 user1452273

Otra alternativa es Guava , que tiene un conjunto de utilidades Hashing fáciles de usar . Por ejemplo, para codificar una cadena usando SHA256 como cadena hexadecimal, simplemente haría:

final String hashed = Hashing.sha256()
        .hashString("your input", StandardCharsets.UTF_8)
        .toString();
Jonathan avatar Aug 20 '2013 16:08 Jonathan