260 votes

Comment hacher une chaîne avec sha256 en Java ?

Comment puis-je hacher une chaîne de caractères avec sha256 en Java ?

356voto

Jon Skeet Points 692016

SHA-256 n'est pas un "encodage" - c'est un hachage à sens unique.

Il s'agit essentiellement de convertir la chaîne de caractères en octets (par exemple en utilisant text.getBytes(StandardCharsets.UTF_8) ), puis de hacher les octets. Notez que le résultat du hachage également sont des données binaires arbitraires, et si vous voulez les représenter dans une chaîne, vous devez utiliser la base64 ou hex... Ne le fais pas. essayez d'utiliser le String(byte[], String) constructeur.

par exemple

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

214voto

seba Points 251

Je pense que la solution la plus simple est d'utiliser Apache Common Codec :

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

110voto

Jonathan Points 5620

Une autre alternative est Goyave qui dispose d'une suite facile à utiliser de Hachage utilitaires. Par exemple, pour hacher une chaîne de caractères en utilisant SHA256 en tant que chaîne hexagonale, il suffit de faire :

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

108voto

user1452273 Points 141

Exemple complet de hachage d'une chaîne de caractères comme une autre chaîne de caractères.

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

60voto

Eduardo Dennis Points 799

Si vous utilisez Java 8, vous pouvez coder le code byte[] en faisant

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X