Classe Messagedigest
La classe MessagediGest fournit des applications les fonctionnalités des algorithmes d'information Digest, tels que les algorithmes MD5 ou SHA. Le digest des informations est une fonction de hachage à sens unique sûre qui reçoit des données de toute taille et publie une valeur de hachage de longueur fixe.
L'objet Messagedigest commence à être initialisé. Cet objet traite les données en utilisant la méthode Update (). Vous pouvez appeler la méthode reset () à tout moment pour réinitialiser le résumé. Une fois que toutes les données qui doivent être mises à jour ont été mises à jour, l'une des méthodes Digest () doit être appelée pour terminer le calcul de hachage.
La méthode Digest ne peut être appelée qu'une seule fois pour une quantité donnée de données de mise à jour. Une fois le digest appelé, l'objet Messagedigest est réinitialisé à son état initial.
illustrer:
Sur le site Web, afin de protéger les informations de confidentialité telles que le nom d'utilisateur et le mot de passe du membre du site Web, nous les cryptons directement dans MD5 ou d'autres manières lors de l'enregistrement. Même l'administrateur de la base de données ne peut pas afficher le mot de passe du membre et d'autres informations. L'effet de mot de passe dans la base de données est tel que: 8E830882F03B2CB84D1A657F346DD41A.
Parce que l'algorithme MD5 est irréversible, il est largement utilisé par de nombreux sites Web.
Trois méthodes de chiffrement couramment utilisées
Méthode 1: Utilisez des opérateurs de bits pour convertir les données chiffrées en méthode hexadécimale 2: Utilisez la méthode de mise en forme pour convertir les données chiffrées en hexadécimal (recommandé)
Méthode 3: Utilisez un algorithme pour convertir les données cryptées en hexadécimal
Importer Java.Security.Messagedigest; Importer Java.Security.NosuchalgorithMexception; / ** * Utilisez la classe Messagedigest qui est livrée avec Java * @author Xiaokui * / Class Public EncryptionUtil {/ ** * Étant donné que MD5 et SHA-1 développés entre MD4, leur structure et leurs caractéristiques de résistance ont de nombreuses similitudes * Le digest est 32 bits plus long que le MD5 Digest (1yte = 8 bits, équivalent à 4 bytes de long, 8 caractères de plus que MD5 après la conversion en hexadécimal). * Pour les attaques forcées, MD5 est une opération de l'ordre de 2128 et SHA-1 est une opération de l'ordre de 2160. * La difficulté pour deux messages avec le même digest: MD5 est une opération de 264 est une opération de l'ordre de magnitude. * Par conséquent, SHA-1 est plus puissant contre les attaques forcées. Cependant, parce que SHA-1 a plus d'étapes de cycle que MD5 (80:64) et que le cache à traiter est plus grand (160 bits: 128 bits), SHA-1 fonctionne lentement que MD5. * * @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try {messagedigest md = MessagediGest.getInstance (hashType); md.update (source.getBytes ()); // en traitement des données en utilisant la méthode de mise à jour, le byte spécifié est mis à jour pour mettre à jour le byte DIGST md.digest (); // obtenez le texte chiffré pour compléter le calcul du hachage et produire un char de longueur de 128 bits de long [] = nouveau char [16 * 2]; // si chaque octet est représenté en position de caractère hexadécimal dans le résultat de la conversion pour (int i = 0; i <16; octet en caractères hexadécimaux octet octet byte0 = encryptstr [i]; // prendre le i-th octet str [k ++] = hexDigits [byte0 >>> 4 & 0xf]; // prendre la conversion numérique des 4 bits supérieurs dans le byte, >>> pour le changement logique [byte0 et les bits symboliques Str [k ++] = hexdigit 0xf]; // Prenez la conversion numérique des 4 bits inférieurs dans l'octet} Renvoie une nouvelle chaîne (STR); // convertir le résultat après conversion en une chaîne} Catch (retour nosuchalgorithMexception e) {E.PrintStackTrace ();} RETOUR @return * / public static String gethash2 (String Source, String HashType) {StringBuilder sb = new StringBuilder (); MessagediGest MD5; Try {md5 = MessagediGest.getInStance (HashType); Md5.UpDate (Source.getBytes ()); pour (byte b: md5.digest ()) {sb.append (string.format ("% 02x", b)); // décimal à hexadécimal, x signifie la sortie en hexadécimal, 02 indique qu'il y a moins de deux chiffres avant que la sortie soit 0} return sb.tostring ();} Catch (NosuchalgorithMexect E) {e.PrintStStack @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash3(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringBuilder sb = new StringBuilder (); MessagediGest MD5; try {md5 = MessagediGest.getInstance (hashtype); md5.update (source.getbytes (); ) (NosuchalgorithMexception e) {e.printStackTrace ();} return null;} public static void main (String [] args) {System.out.println (gethash ("Xiaokui", "md5")); System.out.println (Gethash (Xiaokui "," Sha ") + "/n");system.out.println(gethash2("xiaokui", "md5")); System.out.println (gethash2 ("xiaokui", "sha") + "/n") ;system.out.println(gethash3("xiaKui", "MD5")); System.out.println (Gethash3 ("xiaokui", "sha") + "/ n");}}Résultat de sortie
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E830882F03B2CB84D1A657F346DD41A 0ba5512371d00c86e91712f44aab713898745f91 8e830882f03b2cb84d1a657f346dd41a 0ba5512371d00c86e91712f44aab713898745f91
Nous avons constaté que les trois méthodes effectuaient le même effet et que la longueur SHA est de 8 caractères (32 bits) de plus que MD5.
Résumer
Ce qui précède est l'intégralité du contenu de cet article sur l'exemple de code de la classe MessagediGest de la classe de chiffrement qui est livré avec Java. J'espère que ce sera utile à tout le monde. S'il y a des lacunes, veuillez laisser un message pour le signaler.