Le chiffrement et le déchiffrement sont des processus fréquemment utilisés, et Spring Security a une interface pratique et est facile à utiliser, alors créons un exemple.
Pour le texte: org.springframework.security.crypto.encrypt.TextEncryptor Pour le tableau d'octets: org.springframework.security.crypto.encrypt.BytesEncryptor
Pour le texte: org.springframework.security.crypto.keygen.StringKeyGenerator Pour le tableau d'octets: org.springframework.security.crypto.keygen.BytesKeyGenerator
package sample.security;
import java.util.Base64;
import org.apache.commons.codec.binary.Hex;
import org.springframework.security.crypto.encrypt.BytesEncryptor;
import org.springframework.security.crypto.encrypt.Encryptors;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.security.crypto.keygen.KeyGenerators;
public class Test {
public static void main(String[] args) {
//Texte brut
String orginalText = "J'aime ◯◯.";
//Clé commune
String encryptSecrerKey = "GOV2dkHGQcE1ZcX8";
//Sel: génération aléatoire
byte[] bytes = KeyGenerators.secureRandom(16).generateKey();
String salt = new String(Hex.encodeHexString(bytes));
//Méthode CBC
TextEncryptor cbcTextEncryptor = Encryptors.text(orginalText, salt);
//chiffrement
String encryptedCbcData = cbcTextEncryptor.encrypt(orginalText);
System.out.println("Résultat chiffré (AES-CBC): " + encryptedCbcData);
//Décryptage
String decryptedCbcData = cbcTextEncryptor.decrypt(encryptedCbcData);
System.out.println("Résultat décrypté (AES-CBC): " + decryptedCbcData);
//Méthode GCM
TextEncryptor aesGcmTextEncryptor = Encryptors.delux(encryptSecrerKey, salt);
//chiffrement
String encryptedData = aesGcmTextEncryptor.encrypt(orginalText);
System.out.println("Résultat chiffré (AES-GCM): " + encryptedData);
//Décryptage
String decryptedData = aesGcmTextEncryptor.decrypt(encryptedData);
System.out.println("Résultat décrypté (AES-GCM): " + decryptedData);
//binaire(CBC)
BytesEncryptor binaryEncryptor = Encryptors.standard(encryptSecrerKey, salt);
//chiffrement
String encryptedBinaryData = Base64.getEncoder()
.encodeToString(binaryEncryptor.encrypt(orginalText.getBytes()));
System.out.println("Résultat chiffré (CBC binaire): " + encryptedBinaryData);
//Décryptage
byte[] decryptedBinaryData = binaryEncryptor.decrypt(Base64.getDecoder().decode(encryptedBinaryData));
System.out.println("Résultat décrypté (CBC binaire): " + new String(decryptedBinaryData));
//binaire(GCM)
BytesEncryptor aesGcmBinaryEncryptor = Encryptors.stronger(encryptSecrerKey, salt);
//chiffrement
String gcmEncryptedBinaryData = Base64.getEncoder()
.encodeToString(aesGcmBinaryEncryptor.encrypt(orginalText.getBytes()));
System.out.println("Résultat chiffré (GCM binaire): " + gcmEncryptedBinaryData);
//Décryptage
byte[] gcmDecryptedBinaryData = binaryEncryptor.decrypt(Base64.getDecoder().decode(encryptedBinaryData));
System.out.println("Résultat décrypté (GCM binaire): " + new String(gcmDecryptedBinaryData));
}
}
Exemple de résultat d'exécution:
Résultat chiffré (AES-CBC): a34e20774314b85322de3eaf6c10f6990befe353d382cc449039524ffb7042b442f2a7a00beeddc94c8ad1495f6a0fba Résultat décrypté (AES-CBC): J'aime ◯◯. Résultat chiffré (AES-GCM): 1f5c89aeabf9f05a3cb286d1eca6e06ecd3259e9e52cea96d80e41d60614e436657317b7e69ad5b3e8672adaadd2434af69cbd36b516462908bef Résultat décrypté (AES-GCM): J'aime ◯◯. Résultat chiffré (CBC binaire): zQg1LujXz6lpMwVoqNvG + ETtDbEC / LE0kq1LKJ + 4d8ntbPDHDsAC0e5w6Eym7Hps Résultat décrypté (CBC binaire): J'aime ◯◯. Résultat chiffré (GCM binaire): gSFtQJCV0OSkjdg8sf + WHxYAFIdZrgb6MFWsPTmzau67lzFVW + ZJP36bWPQQ0p8 / QZ9FIgQ7isZm4fIYt1g = Résultat décrypté (GCM binaire): J'aime ◯◯.
Référence: https://docs.spring.io/spring-security/site/docs/5.2.1.RELEASE/reference/htmlsingle/#spring-security-crypto-encryption-text
c'est tout