Java Symmetric Encryption: Bringen Sie Ihnen Verschlüsselung von Hand bei (wenn Sie es nicht verstehen, bitte selbst Baidu)

Lassen Sie uns zunächst über symmetrische Verschlüsselung sprechen. Symmetrische Verschlüsselung bezieht sich auf den Prozess der Verwendung desselben Schlüssels sowohl für die Verschlüsselung als auch für die Entschlüsselung. Einfach ausgedrückt, es ist wie ein Schloss, das denselben Schlüssel benötigt, um es zu öffnen. Da diese Methode einfach zu implementieren ist, wird sie bei vielen Gelegenheiten weit verbreitet verwendet.

Als Nächstes implementieren wir die symmetrische Verschlüsselung in Java. Wir wählen den AES-Algorithmus, einen weit verbreiteten symmetrischen Verschlüsselungsalgorithmus. Zuerst müssen wir einen Schlüssel mit der Schlüsselklasse im javax.crypto-Paket generieren. Folgendermaßen:

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    
	
	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
		
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
	}
}

Als nächstes müssen wir die Verschlüsselungsklasse im javax.crypto-Paket wie folgt zur Verschlüsselung verwenden:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    
	
	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
		
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
		
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, keySpec);
		
		byte[] input = "Hello, world!".getBytes("UTF-8");
		byte[] encrypted = cipher.doFinal(input);
		
		System.out.println(new String(encrypted, "UTF-8"));
	}
}

In diesem Beispiel verwenden wir den AES-Algorithmus und den ECB-Modus und die PKCS5Padding-Füllmethode. ECB ist ein einfacher Modus, der Klartext in Blöcke fester Größe unterteilt und jeden Block einzeln verschlüsselt. PKCS5Padding ist ein Padding-Verfahren, das am Ende des Klartextes entsprechende Bytes auffüllt, sodass die Klartextlänge ein ganzzahliges Vielfaches der Blocklänge ist.

Schließlich müssen wir denselben Schlüssel und dieselbe Entschlüsselungsklasse verwenden, um wie folgt zu entschlüsseln:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    

	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
	
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
	
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, keySpec);
	
		byte[] input = "Hello, world!".getBytes("UTF-8");
		byte[] encrypted = cipher.doFinal(input);
	
		cipher.init(Cipher.DECRYPT_MODE, keySpec);
		byte[] decrypted = cipher.doFinal(encrypted);
	
		System.out.println(new String(decrypted, "UTF-8"));
	}
}

In diesem Beispiel verwenden wir zuerst denselben Schlüsselgenerator, um denselben Schlüssel zu generieren. Wir verschlüsseln dann den Klartext mit derselben Verschlüsselungsklasse und demselben Schlüssel und übergeben den verschlüsselten Chiffretext als Eingabe an die Entschlüsselungsklasse. Da wir denselben Schlüssel verwenden, kann die Decryptor-Klasse den Chiffretext korrekt entschlüsseln und den Klartext ausgeben.

Nun, das war's für eine einfache Implementierung der symmetrischen Verschlüsselung in Java. Ich hoffe, dieser Artikel kann Ihnen helfen, den Betriebsprozess der symmetrischen Java-Verschlüsselung zu verstehen. Warum verwenden wir Verschlüsselung? Weil wir oft vertrauliche Informationen schützen müssen, um Informationslecks zu vermeiden. Dann, wenn Sie es das nächste Mal brauchen, gibt es einen Hand-in-Hand-Beispielcode als Referenz!

Guess you like

Origin blog.csdn.net/heihaozi/article/details/129920898