Maison  >  Article  >  Java  >  Implémentation de trois algorithmes de chiffrement symétrique DES/3DES/AES en Java

Implémentation de trois algorithmes de chiffrement symétrique DES/3DES/AES en Java

巴扎黑
巴扎黑original
2017-04-30 10:07:281458parcourir

Il y a deux phrases qui disent ceci :

1) Les algorithmes et les structures de données constituent une partie importante de la programmation. Si vous perdez des algorithmes et des structures de données, vous perdrez tout.

2) La programmation est constituée d'algorithmes et de structures de données. Les algorithmes et les structures de données sont l'âme de la programmation.

Attention, ce n'est pas ce que j'ai dit. Il a été résumé par d'innombrables programmeurs. Ce que j'ai dit est très pratique et perspicace. Si vous voulez développer de manière durable, il est nécessaire d'étudier davantage d'algorithmes. vous parlera des algorithmes de chiffrement symétrique, et ici nous vous apprendrons la programmation et l'utilisation de l'algorithme de chiffrement symétrique. Il comprend la programmation et l'utilisation de trois algorithmes de chiffrement symétriques : DES, 3DES et AES, et regorge d'informations utiles.

1. Algorithme cryptographique symétrique

Les algorithmes cryptographiques symétriques sont aujourd’hui les algorithmes de chiffrement les plus largement utilisés et les plus fréquemment utilisés. Il n’est pas seulement utilisé dans l’industrie du logiciel, mais également dans l’industrie du matériel. Chaque fois que des exigences de sécurité sont impliquées dans diverses infrastructures, les algorithmes de chiffrement symétriques seront prioritaires.

La clé de chiffrement et la clé de déchiffrement des algorithmes cryptographiques symétriques sont identiques. Pour la plupart des algorithmes cryptographiques symétriques, les processus de chiffrement et de déchiffrement sont inversés.

(1) Modèle de communication de cryptage et de décryptage

Implémentation de trois algorithmes de chiffrement symétrique DES/3DES/AES en Java

(2) Caractéristiques : algorithme ouvert, petite quantité de calcul, vitesse de cryptage rapide, efficacité de cryptage élevée

(3) Faiblesse : les deux parties utilisent la même clé et la sécurité ne peut être garantie

Les chiffrements symétriques incluent les chiffrements par flux et les chiffrements par blocs, mais les chiffrements par blocs sont désormais couramment utilisés :

(4) Mode de fonctionnement du chiffrement par bloc

  • 1) ECB : livre de codes électronique (le plus couramment utilisé, chaque cryptage génère un groupe de texte chiffré indépendant et n'affectera pas les autres groupes de texte chiffré, c'est-à-dire que le même texte en clair produira le même texte chiffré après cryptage)


  • 2) CBC : lien de texte chiffré (couramment utilisé, avant que le chiffrement du texte en clair doive être XORé avec le texte chiffré précédent, c'est-à-dire que le même texte en clair produira un texte chiffré différent après le chiffrement)


  • 3) CFB : retour de texte chiffré


  • 4) OFB : Retour d'information de sortie


  • 5) CTR : Compteur


Ces cinq modes de fonctionnement sont principalement utilisés par les algorithmes de cryptographie lors de la réalisation de calculs de dérivation.

6. Méthode de remplissage du chiffrement par bloc

  • 1) NoPadding : Pas de rembourrage


  • 2) PKCS5Padding :


  • 3) Rembourrage ISO10126 :


7. Mots de passe symétriques couramment utilisés :

  • 1) DES (norme de cryptage des données, norme de cryptage des données)


  • 2) 3DES (algorithme de cryptage Triple DES, DESede, triple DES)


  • 3) AES (Advanced Encryption Standard, norme avancée de cryptage des données, l'algorithme AES peut résister efficacement à l'algorithme d'attaque contre DES)


Regardons d'abord une simple comparaison de ces trois algorithmes :

算法 密钥长度 默认密钥长度 工作模式 填充方式
DES 56 56 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
3DES 112、168 168 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
AES 128、192、256 128 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding

Voyons comment utiliser les trois algorithmes DES / 3DES / AES pour mettre en œuvre le chiffrement symétrique :

Algorithme 2.DES

1.DES : Norme de cryptage des données, un algorithme typique dans le domaine des algorithmes de cryptage symétriques

2. Caractéristiques : clé courte (56 bits), cycle de vie court (pour éviter d'être fissuré)

3. Implémentation Java

1) Générer la clé

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器
keyGen.init(56);//初始化密钥生成器
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

​2) Cryptage

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3) Décryptage

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

Nous pouvons constater que nous définissons simplement différents modes de cryptage et de décryptage.

Algorithme 3.3DES

1.3DES : Augmentez la longueur de la clé à 112 ou 168 bits, et améliorez la sécurité en augmentant le nombre d'itérations

2. Inconvénients : vitesse de traitement lente, temps de calcul des clés long, faible efficacité de cryptage

3. Implémentation Java

1) Générer la clé

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器
keyGen.init(168);  //可指定密钥长度为112或168,默认为168   
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

​2) Cryptage 3DES

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3) Décryptage 3DES

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

4.Algorithme AES (recommandé)

1.AES : Advanced Data Encryption Standard, qui peut résister efficacement à toutes les attaques connues contre l'algorithme DES

2. Caractéristiques : temps d'établissement de clé court, bonne sensibilité, faibles besoins en mémoire et haute sécurité

3. Implémentation Java

1) Générer la clé

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器
keygen.init(128);  //默认128,获得无政策权限后可为192或256
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

​2) Cryptage AES

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

​3) Décryptage AES

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

Pour faciliter l'utilisation, j'ai écrit des classes d'outils pour les trois algorithmes DES/3DES/AES, adresse : https://github.com/smartbetter/Android-UtilsLibrary (nouvelle classe d'outils DES/3DES/AES).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn