¿Cómo codificar una cadena con SHA-256 en Java?
¿ Cómo puedo codificar algunos String
en SHA-256
Java?
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));
Creo que la solución más sencilla es utilizar Apache Common Codec :
String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText);
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);
}
}
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();