Es gibt zwei Sätze, die das sagen:
1) Algorithmen und Datenstrukturen sind ein wichtiger Teil der Programmierung. Wenn Sie Algorithmen und Datenstrukturen verlieren, verlieren Sie alles.
2) Programmierung besteht aus Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen sind die Seele der Programmierung.
Beachten Sie, dass dies nicht das ist, was ich gesagt habe. Was ich gesagt habe, ist sehr praktisch und aufschlussreich. Wenn Sie sich langfristig und nachhaltig weiterentwickeln möchten, werde ich es tun Informieren Sie sich über symmetrische Verschlüsselungsalgorithmen, und hier zeigen wir Ihnen die Programmierung und Verwendung symmetrischer Verschlüsselungsalgorithmen. Es umfasst die Programmierung und Verwendung von drei symmetrischen Verschlüsselungsalgorithmen: DES, 3DES und AES und ist voller nützlicher Informationen.
Symmetrische kryptografische Algorithmen sind heute die am weitesten verbreiteten und am häufigsten verwendeten Verschlüsselungsalgorithmen. Es wird nicht nur in der Softwareindustrie eingesetzt, sondern erfreut sich auch in der Hardwareindustrie großer Beliebtheit. Wenn es um Sicherheitsanforderungen in verschiedenen Infrastrukturen geht, werden symmetrische Verschlüsselungsalgorithmen Vorrang haben.
Der Verschlüsselungsschlüssel und der Entschlüsselungsschlüssel symmetrischer kryptografischer Algorithmen sind gleich. Bei den meisten symmetrischen kryptografischen Algorithmen sind die Verschlüsselungs- und Entschlüsselungsprozesse umgekehrt.
(1) Kommunikationsmodell für Verschlüsselung und Entschlüsselung
(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
Zu den symmetrischen Chiffren gehören Stream-Chiffren und Block-Chiffren, aber auch Block-Chiffren werden heute häufig verwendet:
(4) Blockverschlüsselungs-Arbeitsmodus
1) ECB: Elektronisches Codebuch (am häufigsten verwendet, jede Verschlüsselung generiert eine unabhängige Chiffretextgruppe und wirkt sich nicht auf andere Chiffretextgruppen aus, d. h. derselbe Klartext erzeugt nach der Verschlüsselung denselben Chiffretext)
2) CBC: Chiffretext-Link (wird häufig verwendet, bevor die Klartextverschlüsselung mit dem vorherigen Chiffretext XOR-verknüpft werden muss, d. h. derselbe Klartext erzeugt nach der Verschlüsselung einen anderen Chiffretext)
3) CFB: Chiffriertext-Feedback
4) OFB: Ausgabe-Feedback
5) CTR: Zähler
Diese fünf Arbeitsmodi werden hauptsächlich von Algorithmen in der Kryptographie bei der Durchführung von Ableitungsrechnungen verwendet.
6. Füllmethode für Blockverschlüsselung
1) NoPadding: Keine Polsterung
2) PKCS5Padding:
3) ISO10126Padding:
7. Häufig verwendete symmetrische Passwörter:
1) DES (Datenverschlüsselungsstandard, Datenverschlüsselungsstandard)
2) 3DES (Triple DES, DESede, Triple DES-Verschlüsselungsalgorithmus)
3) AES (Advanced Encryption Standard, erweiterter Datenverschlüsselungsstandard, der AES-Algorithmus kann dem Angriffsalgorithmus gegen DES wirksam widerstehen)
Schauen wir uns zunächst einen einfachen Vergleich dieser drei Algorithmen an:
算法 | 密钥长度 | 默认密钥长度 | 工作模式 | 填充方式 |
---|---|---|---|---|
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 |
Sehen wir uns an, wie man die drei Algorithmen DES / 3DES / AES verwendet, um eine symmetrische Verschlüsselung zu implementieren:
1.DES: Datenverschlüsselungsstandard, ein typischer Algorithmus im Bereich der symmetrischen Verschlüsselungsalgorithmen
2. Merkmale: kurzer Schlüssel (56 Bit), kurzer Lebenszyklus (um Risse 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 feststellen, dass wir einfach unterschiedliche Modi für die Verschlüsselung und Entschlüsselung eingestellt haben.
1.3DES: Erhöhen Sie die Schlüssellänge auf 112 oder 168 Bit und verbessern Sie die Sicherheit durch Erhöhen der Anzahl der Iterationen
2. Nachteile: langsame Verarbeitungsgeschwindigkeit, lange Schlüsselberechnungszeit, geringe Verschlüsselungseffizienz
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
1.AES: Advanced Data Encryption Standard, der allen bekannten Angriffen gegen den DES-Algorithmus wirksam widerstehen kann
2. Merkmale: kurze Schlüsselaufbauzeit, gute Empfindlichkeit, geringer Speicherbedarf und 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 der Verwendung habe ich Toolklassen für die drei Algorithmen DES/3DES/AES geschrieben, Adresse: https://github.com/smartbetter/Android-UtilsLibrary (neue DES/3DES/AES-Toolklasse).
Das obige ist der detaillierte Inhalt vonImplementierung der drei symmetrischen Verschlüsselungsalgorithmen DES/3DES/AES in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!