Maison >Java >javaDidacticiel >Implémentation de trois algorithmes de chiffrement symétrique DES/3DES/AES en Java
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.
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
(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 :
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.
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
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!