Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Java-Implementierung der symmetrischen Verschlüsselung (DES, 3DES, AES)

Detaillierte Erläuterung der Java-Implementierung der symmetrischen Verschlüsselung (DES, 3DES, AES)

高洛峰
高洛峰Original
2017-01-24 11:06:323196Durchsuche

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

Detaillierte Erläuterung der Java-Implementierung der symmetrischen Verschlüsselung (DES, 3DES, AES)

(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:

Detaillierte Erläuterung der Java-Implementierung der symmetrischen Verschlüsselung (DES, 3DES, AES)

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!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn