Cet article décrit l'analyse de la mise en œuvre Java de l'algorithme de cryptage et de décryptage DES. Partagez-le pour votre référence, comme suit:
Introduction:
L'algorithme de chiffrement des données (DEA) est un algorithme de chiffrement symétrique qui est probablement le système clé le plus utilisé, en particulier pour protéger la sécurité des données financières. La DEA initialement développée a été intégrée dans le matériel. Habituellement, les machines de caissières automatiques (ATM) utilisent DEA. Il provient du travail de recherche d'IBM, qui avait également des droits de brevet pendant plusieurs années, mais après son expiration en 1983, il est dans la portée du public et lui permet d'être utilisé dans certaines conditions sans frais d'utilisation des brevets. Il a été officiellement adopté par le gouvernement américain en 1977.
L'émergence de déchiffres pratiques après 1998 a complètement déclaré que l'algorithme DES n'est plus sûr. En 1999, le NIST a publié une nouvelle norme, stipulant que l'algorithme DES ne peut être utilisé que dans les systèmes de chiffrement hérités, mais ne restreint pas l'utilisation de l'algorithme DeSede. L'algorithme DES d'aujourd'hui lance le stade de l'histoire, et l'algorithme AES est appelé son remplacement.
Principe de cryptage:
DES utilise une clé 56 bits avec un bit de parité 8 bits supplémentaire pour générer une taille de paquet maximale de 64 bits. Il s'agit d'un mot de passe de bloc itératif utilisant une technique appelée Feistel, où les blocs de texte chiffrés sont divisés en deux. Utilisez une sous-clé pour appliquer la fonction de boucle à une moitié, puis effectuez une opération "exclusive ou" avec l'autre moitié; Échangez ensuite ces deux moitiés, et le processus se poursuivra, mais la dernière boucle ne sera pas échangée. DES utilise 16 cycles, quatre opérations de base: exclusives ou permutation, substitution et opérations de quart de travail.
Le support de JDK pour l'algorithme des
Longueur clé: 56 bits
Mode de travail: ECB / CBC / PCBC / CTR / CTS / CFB / CFB8 à CFB128 / OFB / OBF8 à OFB128
Méthode de remplissage: nopadding / pkcs5padding / iso10126padding /
Java Encryption et décryptage Algorithme de chiffrement symétrique
Deede est l'algorithme Triple Des Encryption, également connu sous le nom de 3des ou Triple DES. Utilisez trois (ou deux) clés différentes pour crypter le bloc de données trois fois (ou deux) de DES (cryptage une fois est plus rapide que de faire un chiffrement ordinaire trois fois). La force du triple DES est approximativement la même que la force clé du 112 bits. La sécurité est améliorée par le nombre d'itérations, mais elle entraîne également le problème d'une faible efficacité de cryptage. En raison de l'efficacité de l'algorithme DeSede, l'algorithme AES est né.
Jusqu'à présent, personne n'a donné un moyen efficace d'attaquer Triple DES. Si vous recherchez les touches dans son espace clé, alors parce que l'espace est trop grand, ce n'est en fait pas possible. Si la méthode d'attaque différentielle est utilisée, la complexité augmente de façon exponentielle par rapport à un seul DES.
Il y a quatre modèles de triple des
Code de cryptage Java pour l'algorithme DES
Package com.favccxx.codelib; Importer java.security.securerAndom; Importer javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeypec; Public Static Byte [] Encrypt (BYTE [] SRC, BYTE [] KEY) lève une exception {// DES Algorithme nécessite une source de nombre aléatoire de fiducie Secure RecurerAndom Sr = new SecureRandom (); // Créez un objet DeskeySpec à partir des données de clés d'origine DeskeySpec DKS = new DeskeySpec (clé); // Créez une usine clé et utilisez-la pour convertir Deskeyspec en un objet SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GenerateSeCret (DKS); // L'objet Cipher complète en fait l'opération de chiffrement Cipher Cipher = Cipher.getInstance (DES); // Initialisez l'objet Cipher Cipher.init (cipher.encrypt_mode, SecureKey, SR); // Exécution formelle de l'opération de chiffrement Retour Cipher.Dofinal (SRC); } / ** * * @param mot de passe mot de passe * @param key cryption chaîne * @return * / public final static string Encrypt (String Motword, String key) {try {return byte2String (Encrypt (mot de passe.getbytes (), key.getbytes ())); } catch (exception e) {} return null; } String statique public byte2String (byte [] b) {String hs = ""; String stmp = ""; pour (int n = 0; n <b.length; n ++) {stmp = (java.lang.integer.tohexString (b [n] & 0xff)); if (stmp.length () == 1) hs = hs + "0" + stmp; else hs = hs + stmp; } return hs.touppercase (); } public static void main (String [] args) {String EncryptString = Encrypt ("is zhang sanfeng", "Tester chinois et anglais mixtes @ 123654 {"); System.out.println (EncryptString); } // Sortie: B00542E93695F4CFCE34FC4393C2F4BF} Implémentation Java de l'algorithme de décryptage DES
Package com.favccxx.codelib; Importer java.security.securerAndom; Importer javax.crypto.cipher; Importer javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeypec; Classe publique DESCRYPTCODER {fin privé Static String; Deskeypec; / ** * * @param source de données SRC * clé @param clé, la longueur doit être des multiples de 8 * @return * @throws exception * / public static byte [] décrypt (byte [] src, byte [] key) lève exception {// l'algorithme de deurs nécessite une source de nombre aléatoire de confiance SecureRandom sr = new séquencer (); // Créez un objet DeskeySpec à partir des données de clés d'origine DeskeySpec DKS = new DeskeySpec (clé); // Créez une usine clé, puis utilisez-la pour convertir l'objet DeskeySpec en un objet SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GenerateSeCret (DKS); // L'objet Cipher complète en fait l'opération de décryptage Cipher Cipher = Cipher.getInstance (DES); // Initialisez l'objet Cipher Cipher.init (cipher.decrypt_mode, SecureKey, SR); // Exécution formelle de l'opération de décryptage Retour Cipher.Dofinal (SRC); } public final static String Decrypt (String data, string key) {try {return new String (decrypt (string2byte (data.getBytes ()), key.getBytes ())); } catch (exception e) {e.printStackTrace (); } return null; } byte statique public [] String2Byte (byte [] b) {if ((b.length% 2)! = 0) Jetez un nouveau IllégalArgumentException ("la longueur n'est même pas"); octet [] b2 = nouveau octet [B.Length / 2]; pour (int n = 0; n <b.length; n + = 2) {string item = new String (b, n, 2); b2 [n / 2] = (byte) Integer.ParseInt (item, 16); } return b2; } public static void main (String [] args) {String DesencryptString = Decrypt ("b00542e93695f4cfce34fc4393c2f4bf", "tester chinois et anglais mixés @ 123654"); System.out.println (DesencryptString); } // Sortie: est Zhang Sanfeng}J'espère que cet article vous sera utile. Tout cela est pour vous d'introduire le contenu d'analyse de la mise en œuvre Java de l'algorithme de cryptage et de décryptage DES. J'espère que tout le monde continuera à suivre notre site Web! Si vous souhaitez apprendre Java, vous pouvez continuer à suivre ce site Web.