desencriptar decrypt decodificar algoritmo java encryption sha256

decrypt - ¿Cómo hash string con sha256 en Java?



sha2 java (10)

¿Cómo hash string con sha256 en Java? ¿Alguien sabe alguna biblioteca gratis para esto?


Aquí hay una forma un poco más eficiente de convertir el resumen en una cadena hexagonal:

private static final char[] hexArray = "0123456789abcdef".toCharArray(); public static String getSHA256(String data) { StringBuilder sb = new StringBuilder(); try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data.getBytes()); byte[] byteData = md.digest(); sb.append(bytesToHex(byteData); } catch(Exception e) { e.printStackTrace(); } return sb.toString(); } private static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; for ( int j = 0; j < bytes.length; j++ ) { int v = bytes[j] & 0xFF; hexChars[j * 2] = hexArray[v >>> 4]; hexChars[j * 2 + 1] = hexArray[v & 0x0F]; } return String.valueOf(hexChars); }

¿Alguien sabe de una manera más rápida en Java?


Creo que la solución más fácil es usar Apache Common Codec :

String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText);


Ejemplo completo hash a cadena como otra cadena.

public static String sha256(String base) { try{ MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(base.getBytes("UTF-8")); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < hash.length; i++) { 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 hash una cadena usando SHA256 como una cadena hexadecimal, simplemente harías:

final String hashed = Hashing.sha256() .hashString("your input", StandardCharsets.UTF_8) .toString();


Puede usar MessageDigest de la siguiente manera:

public static String getSHA256(String data){ StringBuffer sb = new StringBuffer(); try{ MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data.getBytes()); byte byteData[] = md.digest(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); } } catch(Exception e){ e.printStackTrace(); } return sb.toString(); }


SHA-256 no es una "codificación", es un hash de un solo sentido.

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

p.ej

MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));


Si está utilizando Java 8 puede codificar el byte[] haciendo

MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8)); String encoded = Base64.getEncoder().encodeToString(hash);


Convertir Java String a Sha-256 Hash

import java.security.MessageDigest; public class CodeSnippets { public static String getSha256(String value) { try{ MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(value.getBytes()); return bytesToHex(md.digest()); } catch(Exception ex){ throw new RuntimeException(ex); } } private static String bytesToHex(byte[] bytes) { StringBuffer result = new StringBuffer(); for (byte b : bytes) result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); return result.toString(); } }


DigestUtils código de Apache a través de DigestUtils y sha256 parece regresar a java.security.MessageDigest por java.security.MessageDigest para el cálculo. Apache no implementa una solución sha256 independiente. Estaba buscando una implementación independiente para compararla con la biblioteca java.security . Solo para tu información.


String hashWith256(String textToHash) { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] byteOfTextToHash = textToHash.getBytes(StandardCharsets.UTF_8); byte[] hashedByetArray = digest.digest(byteOfTextToHash); String encoded = Base64.encode(hashedByetArray); return encoded; }