Es gibt zwei Sätze, die Folgendes sagen:
1) Algorithmen und Datenstrukturen sind ein wichtiger Teil der Programmierung. Wenn Sie Algorithmen und Datenstrukturen verlieren, verlieren Sie alles.
2) Programmierung ist Algorithmen und Datenstrukturen sind die Seele der Programmierung.
Beachten Sie, dass dies nicht das ist, was ich von unzähligen Programmierern gesagt habe. Es ist sehr praktisch und aufschlussreich. Wenn Sie eine langfristige nachhaltige Entwicklung wünschen, ist es dennoch notwendig, mehr Algorithmen zu studieren. Heute werde ich Ihnen den symmetrischen Verschlüsselungsalgorithmus unter den Verschlüsselungsalgorithmen vorstellen und Ihnen hier beibringen, wie Sie den symmetrischen Verschlüsselungsalgorithmus programmieren und verwenden. Es umfasst die Programmierung und Verwendung von drei symmetrischen Verschlüsselungsalgorithmen: DES, 3DES und AES und ist voller nützlicher Informationen.
1. Symmetrischer kryptografischer Algorithmus
Der symmetrische kryptografische Algorithmus ist heute der am weitesten verbreitete und am häufigsten verwendete Verschlüsselungsalgorithmus. Es wird nicht nur in der Softwareindustrie eingesetzt, sondern ist auch in der Hardwareindustrie beliebt. Wenn es um Sicherheitsanforderungen in verschiedenen Infrastrukturen geht, werden symmetrische Verschlüsselungsalgorithmen Vorrang haben.
Der Verschlüsselungsschlüssel und der Entschlüsselungsschlüssel des symmetrischen kryptografischen Algorithmus sind gleich. Bei den meisten symmetrischen kryptografischen Algorithmen sind die Verschlüsselungs- und Entschlüsselungsprozesse umgekehrt.
(1) Verschlüsselungs- und Entschlüsselungskommunikationsmodell
(2) Merkmale: offener Algorithmus, geringer Rechenaufwand, schnelle Verschlüsselungsgeschwindigkeit, hohe Verschlüsselungseffizienz
(3) Schwäche: Beide Parteien verwenden denselben Schlüssel und die Sicherheit kann nicht garantiert werden
Es gibt zwei Arten symmetrischer Chiffren: Stromchiffren und Blockchiffren, aber Blockchiffren werden heutzutage häufig verwendet:
(4) Blockverschlüsselungs-Arbeitsmodus
1) ECB: Elektronisches Codebuch (am häufigsten verwendet, jede Verschlüsselung generiert eine unabhängige Chiffretextgruppe und hat keinen Einfluss auf andere Chiffretextgruppen, d. h. die Der gleiche Klartext erzeugt nach der Verschlüsselung den gleichen Chiffretext)
2) CBC: Chiffretext-Link (häufig verwendet, bevor die Klartextverschlüsselung mit dem vorherigen Chiffretext XOR-verknüpft werden muss, wird auch derselbe Klartext verschlüsselt, um unterschiedliche zu erzeugen Chiffretext)
Zusätzlich zu diesen beiden häufig verwendeten Arbeitsmodi gibt es:
3) CFB: Chiffretext-Feedback
4) OFB: Ausgabe-Feedback
5) CTR: Counter
Diese fünf Arbeitsmodi werden hauptsächlich von Algorithmen in der Kryptographie bei der Durchführung von Inferenzberechnungen verwendet.
6. Blockchiffre-Auffüllmethode
1) NoPadding: Kein Auffüllen
2) PKCS5Padding:
3) ISO10126Padding:
7. Häufig verwendete symmetrische Chiffren:
1) DES (Data Encryption Standard, Datenverschlüsselungsstandard)
2) 3DES (Triple DES, DESede, ein Algorithmus, der eine dreifache DES-Verschlüsselung durchführt)
3) AES (Advanced Encryption Standard, fortschrittlicher Datenverschlüsselungsstandard, der AES-Algorithmus kann dem Angriffsalgorithmus gegen DES effektiv widerstehen)
Nehmen wir a Schauen Sie sich das zuerst an. Ein einfacher Vergleich der drei Algorithmen:
Sehen wir uns an, wie die drei Algorithmen DES / 3DES / AES verwendet werden, um eine symmetrische Verschlüsselung zu implementieren:
2.DES-Algorithmus
1.DES: Datenverschlüsselungsstandard, ein typischer Algorithmus im Bereich der symmetrischen Verschlüsselungsalgorithmen
2. Eigenschaften: kurzer Schlüssel (56 Bit), kurz Lebenszyklus (um Crack zu vermeiden)
3. Java-Implementierung
1) Schlüssel generieren
KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器 keyGen.init(56);//初始化密钥生成器 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) Verschlüsselung
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) Entschlüsselung
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
Wir können diese Verschlüsselung finden. Wir stellen einfach verschiedene Modi für die Entschlüsselung ein.
3.3DES-Algorithmus
1.3DES: Erhöhen Sie die Schlüssellänge auf 112 Bit oder 168 Bit und verbessern Sie die Sicherheit durch Erhöhen der Anzahl der Iterationen
2 : Die Verarbeitungsgeschwindigkeit ist langsam, die Schlüsselberechnungszeit ist lang und die Verschlüsselungseffizienz ist nicht hoch
3. Java-Implementierung
1) Schlüssel generieren
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器 keyGen.init(168); //可指定密钥长度为112或168,默认为168 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) 3DES-Verschlüsselung
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) 3DES-Entschlüsselung
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.AES-Algorithmus (empfohlen)
1.AES: Advanced Data Encryption Standard, der allen bekannten Angriffen gegen den DES-Algorithmus wirksam widerstehen kann
2. Merkmale: kurze Schlüsselerstellungszeit, gute Empfindlichkeit, geringer Speicherbedarf, hohe Sicherheit
3. Java-Implementierung
1) Schlüssel generieren
KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器 keygen.init(128); //默认128,获得无政策权限后可为192或256 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) AES-Verschlüsselung
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) AES-Entschlüsselung
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
Zur Vereinfachung habe ich Tool-Klassen für die drei Algorithmen DES / 3DES / AES geschrieben. Adresse: Download-Adresse (neue DES/3DES/AES-Tool-Klasse).
Das ist es, die drei Algorithmen DES / 3DES / AES implementieren eine symmetrische Verschlüsselung. Ich hoffe, dass es für alle beim Lernen hilfreich sein wird, und ich hoffe auch, dass alle die chinesische PHP-Website unterstützen.
Ausführlichere Erläuterungen zur Java-Implementierung der symmetrischen Verschlüsselung (DES, 3DES, AES) finden Sie auf der chinesischen PHP-Website!