Analyse du chiffrement MD5

Le concept du cryptage MD5

Le chiffrement MD5 est un algorithme de recueil d'informations couramment utilisé, principalement utilisé pour garantir la cohérence des données et la vérification des signatures. Il s'agit d'un algorithme de chiffrement irréversible.

Le chiffrement MD5 consiste à chiffrer n'importe quel tableau d'octets en 32 octets de données, puis ils sont représentés sous forme de nombres hexadécimaux 32 bits.

Utilisation simple du cryptage MD5

Jetons un coup d'œil à la simple application du chiffrement MD5 sur Java.

Java nous a aidés à réaliser le chiffrement MD5, il suffit d'appeler la fonction système pour y parvenir. La séquence d'appel est la suivante:

Première étape

Obtenez des objets chiffrés MD5:

try {
    messagedigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex) {
    System.err.println(MD5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。");
    nsaex.printStackTrace();
}
Deuxième étape

Données entrantes à chiffrer:

byte[] secretBytes = messagedigest.digest(str.getBytes());

Les données chiffrées peuvent également être transférées par lots:

InputStream fis;
fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int numRead = 0;
while ((numRead = fis.read(buffer)) > 0) {
    messagedigest.update(buffer, 0, numRead);
}
fis.close();
byte[] secretBytes = messagedigest.digest();

Le tableau d'octets renvoyé est un tableau de longueur 16.

La troisième étape

Convertissez le tableau d'octets chiffrés en chiffrement MD5 que nous voyons habituellement:

protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};


private static String bufferToHex(byte bytes[], int m, int n) {
    StringBuffer stringbuffer = new StringBuffer(2 * n);
    int k = m + n;
    for (int l = m; l < k; l++) {
        appendHexPair(bytes[l], stringbuffer);
    }
    return stringbuffer.toString();
}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
    char c0 = hexDigits[(bt & 0xf0) >>> 4];// 取字节中高 4 位的数字转换
    char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
    stringbuffer.append(c0);
    stringbuffer.append(c1);
}

De cette façon, la chaîne chiffrée est obtenue.

Notez que nous voyons généralement une autre façon de convertir l'octet en une chaîne cryptée, qui consiste à utiliser la classe BigInteger:

String md5code = new BigInteger(1, secretBytes).toString(16);

Mais il y a un problème avec cette façon d'écrire, c'est-à-dire que si le nombre le plus élevé de chaînes dans la chaîne chiffrée est 0, il sera omis:

String str = new BigInteger(1, new byte[]{0, 16}).toString(16);
System.out.println(str);
//输出10

Donc, la bonne façon d'utiliser BigInteger est la suivante:

String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
    md5code = "0" + md5code;
}

Ce qui précède est une implémentation simple de MD5 en Java.

Scénarios pratiques de chiffrement MD5

Jetons un coup d'œil aux scénarios d'application du chiffrement MD5.

Le MD5 étant irréversible, il ne convient pas à certaines transmissions cryptées, puis décryptées à l'autre extrémité. Il est principalement utilisé pour masquer des informations et garantir la cohérence des données.

Ci-dessous, nous donnons quelques scénarios spécifiques qui utilisent le cryptage MD5.

Mot de passe utilisateur

Le mot de passe de l'utilisateur est une donnée très sensible. Lorsqu'il est transmis ou stocké, s'il est directement utilisé en texte brut, il entraînera des risques de sécurité cachés.

Par exemple, le texte en clair existe localement sur le client. Une fois le client piraté par root, le fichier peut être directement obtenu pour trouver le mot de passe. Le mot de passe dans la base de données du serveur risque également d'obtenir le mot de passe une fois le serveur fissuré, et le mot de passe peut être vu par le personnel de gestion d'arrière-plan. Au cours de la transmission, si un détournement de DNS se produit, le mot de passe peut également être obtenu.

Par conséquent, si le mot de passe est transmis et stocké, il est préférable d'utiliser le chiffrement MD5. Le client et le serveur comparent les chaînes chiffrées et, si elles correspondent, le mot de passe est vérifié.

Signature d'interface

Si l'interface réseau n'est pas restreinte, chaque partie peut appeler l'interface et implémenter certains services, ce qui entraînera de grands risques pour la sécurité. Pour éviter cette situation, vous pouvez choisir d'ajouter un paramètre de signature à l'interface.

Par exemple, pour l'interface réseau https://wanandroid.com/wxarticle/chapters/json, si vous ajoutez un autre signe de paramètre de signature, sa valeur sera "be happy" + chaîne complète signée MD5, puis reçue en arrière-plan Après la demande, vérifiez la signature pour empêcher les appels malveillants de tiers.

Vérification de la cohérence des fichiers

Le fichier est endommagé pendant le processus de transmission. MD5 peut être utilisé pour vérifier la cohérence du fichier.

Par exemple, lorsque le client télécharge un fichier volumineux, un mécanisme de continuation des points d'arrêt est généralement utilisé. Un scénario est alors requis: après le téléchargement d'une partie du fichier, le téléchargement est interrompu, puis le fichier du serveur est mis à jour pendant cette période. Lorsque le client télécharge ici, le fichier téléchargé est problématique, donc une erreur se produit si la vérification n'est pas effectuée, et si le serveur envoie un fichier, il envoie également une valeur MD5 et le client télécharge Après avoir vérifié la valeur MD5 du fichier téléchargé et la valeur MD5 émise par le serveur, supprimez le fichier et téléchargez-le à nouveau pour éviter cette situation.

Sécurité et piratage du chiffrement MD5

Prenons l'exemple des mots de passe chiffrés, car le chiffrement MD5 est irréversible et la similitude entre les chaînes chiffrées n'est pas liée à la chaîne d'origine, la chaîne d'origine ne peut pas être corrigée en comparant la familiarité de la chaîne chiffrée, donc le craquage de MD5 est généralement Il est basé sur le craquage par force brute, et le résultat du chiffrement MD5 est de 16 à 32 puissances. Si vous voulez casser par force une telle quantité de données, l'ordinateur actuel ne peut pas le faire, donc la sécurité de MD5 est très élevée au sens conventionnel.

Alors, comment le craquage de mot de passe MD5 est-il maintenant populaire sur le marché? En effet, les mots de passe définis par la plupart des gens sont relativement simples, généralement des nombres purs ou des nombres anglais plus, etc., donc lors du craquage par force brute, n'essayez pas étape par étape, chiffrez directement avec des mots de passe courants pour comparer Peut réduire beaucoup de calcul, de manière à atteindre l'objectif de fissuration.

Pour lutter contre cette situation et protéger les informations de mot de passe de l'utilisateur, vous pouvez ajouter des préfixes et suffixes courants au mot de passe de l'utilisateur. Par exemple, l'utilisateur définit le mot de passe sur 123456. Si la chaîne chiffrée est obtenue, elle sera facilement atteinte par la bibliothèque. Crack, mais nous ajoutons manuellement le préfixe et le suffixe, utilisez abc123456xyz , donc la probabilité d'être cracké sera beaucoup plus faible.

Publié 19 articles originaux · loué 8 · visites 4041

Je suppose que tu aimes

Origine blog.csdn.net/u014068277/article/details/103115288
conseillé
Classement