Maison >Java >javaDidacticiel >Comment implémenter l'algorithme de cryptage AES à l'aide de Java
Comment utiliser Java pour implémenter l'algorithme de cryptage AES
Introduction :
Dans le processus d'applications réseau et de transmission de données, la sécurité des données est cruciale. Les algorithmes de cryptage constituent l’un des moyens importants pour protéger la sécurité des données. AES (Advanced Encryption Standard) est l’un des algorithmes de chiffrement symétrique les plus couramment utilisés à l’heure actuelle, offrant une sécurité, une efficacité et une flexibilité élevées. Cet article explique comment utiliser le langage de programmation Java pour implémenter l'algorithme de cryptage AES afin de protéger la sécurité des données.
Importer bibliothèques associées
Avant d'utiliser Java pour implémenter l'algorithme de cryptage AES, nous devons importer les fichiers de bibliothèque pertinents. En Java, l'algorithme de chiffrement AES peut être implémenté à l'aide de la bibliothèque javax.crypto. Nous devons importer les fichiers de bibliothèque suivants :
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec;
Implémentation de la méthode de cryptage et de décryptage AES
public class AESUtil { private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; private static final String SECRET_KEY_ALGORITHM = "PBKDF2WithHmacSHA256"; private static final int ITERATION_COUNT = 65536; private static final int KEY_LENGTH = 128; private static final int IV_LENGTH = 16; public static byte[] encrypt(String plaintext, String password) throws Exception { byte[] salt = generateSalt(); PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH); SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(SECRET_KEY_ALGORITHM); SecretKey secretKey = secretKeyFactory.generateSecret(pbeKeySpec); byte[] iv = generateIV(); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv)); byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8")); byte[] encrypted = new byte[iv.length + salt.length + ciphertext.length]; System.arraycopy(iv, 0, encrypted, 0, iv.length); System.arraycopy(salt, 0, encrypted, iv.length, salt.length); System.arraycopy(ciphertext, 0, encrypted, iv.length + salt.length, ciphertext.length); return encrypted; } public static String decrypt(byte[] encrypted, String password) throws Exception { byte[] iv = new byte[IV_LENGTH]; System.arraycopy(encrypted, 0, iv, 0, iv.length); byte[] salt = new byte[encrypted.length - iv.length - KEY_LENGTH / 8]; System.arraycopy(encrypted, iv.length, salt, 0, salt.length); byte[] ciphertext = new byte[encrypted.length - iv.length - salt.length]; System.arraycopy(encrypted, iv.length + salt.length, ciphertext, 0, ciphertext.length); PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH); SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(SECRET_KEY_ALGORITHM); SecretKey secretKey = secretKeyFactory.generateSecret(pbeKeySpec); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv)); byte[] plaintext = cipher.doFinal(ciphertext); return new String(plaintext, "UTF-8"); } private static byte[] generateSalt() { byte[] salt = new byte[KEY_LENGTH / 8]; SecureRandom secureRandom = new SecureRandom(); secureRandom.nextBytes(salt); return salt; } private static byte[] generateIV() { byte[] iv = new byte[IV_LENGTH]; SecureRandom secureRandom = new SecureRandom(); secureRandom.nextBytes(iv); return iv; } }
Exemple d'utilisation
Nous pouvons maintenant utiliser l'algorithme de cryptage AES implémenté ci-dessus pour crypter et déchiffrer les données.
public class Main { public static void main(String[] args) { try { String plaintext = "Hello, World!"; String password = "MySecretPassword"; byte[] encrypted = AESUtil.encrypt(plaintext, password); System.out.println("Encrypted data: " + Arrays.toString(encrypted)); String decrypted = AESUtil.decrypt(encrypted, password); System.out.println("Decrypted data: " + decrypted); } catch (Exception e) { e.printStackTrace(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!