En cherchant dans les environs et sur Internet en général, j'ai découvert Bouncy Castle . Je souhaite utiliser Bouncy Castle (ou un autre utilitaire disponible gratuitement) pour générer un hachage SHA-256 d'une chaîne en Java. En regardant leur documentation, je n'arrive pas à trouver de bons exemples de ce que je veux faire. Quelqu'un peut-il m'aider ici?
Réponses
Trop de publicités?Si tout ce que vous voulez faire est de hacher une chaîne, je n’utiliserais que la classe MessageDigest intégrée .
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = "This is some text";
md.update(text.getBytes("UTF-8")); // Change this to "UTF-16" if needed
byte[] digest = md.digest();
Tada, digest
contient maintenant le hachage de votre chaîne.
Ceci est déjà implémenté dans les bibliothèques d'exécution.
public static String calc(InputStream is) {
String output;
int read;
byte[] buffer = new byte[8192];
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
while ((read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
byte[] hash = digest.digest();
BigInteger bigInt = new BigInteger(1, hash);
output = bigInt.toString(16);
while ( output.length() < 32 ) {
output = "0"+output;
}
}
catch (Exception e) {
e.printStackTrace(System.err);
return null;
}
return output;
}
Vous n'avez pas nécessairement besoin de la bibliothèque BouncyCastle. Le code suivant montre comment procéder ainsi à l'aide de la fonction Integer.toHexString
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);
}
}
Un merci spécial à l'utilisateur1452273 de ce post: Comment encoder une chaîne avec sha256 en Java?
Continuez votre bon travail!
Lorsque vous utilisez des codes de hachage avec n’importe quel fournisseur jce, essayez d’abord d’obtenir une instance de l’algorithme, puis mettez-le à jour avec les données que vous voulez hacher et, une fois que vous avez terminé, appelez digest pour obtenir la valeur de hachage.
MessageDigest sha = MessageDigest.getInstance("SHA-256");
sha.update(in.getBytes());
byte[] digest = sha.digest();
vous pouvez utiliser le résumé pour obtenir une version encodée en base64 ou hexadécimal selon vos besoins
Je suppose que vous utilisez une version Java relativement ancienne sans SHA-256. Vous devez donc ajouter le fournisseur BouncyCastle aux «fournisseurs de sécurité» déjà fournis dans votre version Java.
// NEEDED if you are using a Java version without SHA-256
Security.addProvider(new BouncyCastleProvider());
// then go as usual
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = "my string...";
md.update(text.getBytes("UTF-8")); // or UTF-16 if needed
byte[] digest = md.digest();