Maison  >  Article  >  Java  >  Comment implémenter l'algorithme de cryptage AES à l'aide de Java

Comment implémenter l'algorithme de cryptage AES à l'aide de Java

WBOY
WBOYoriginal
2023-09-19 14:54:241494parcourir

Comment implémenter lalgorithme de cryptage AES à laide 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.

  1. Introduction à l'algorithme de cryptage AES
    L'algorithme de cryptage AES est un algorithme de cryptage à clé symétrique qui utilise la même clé pour le cryptage et le déchiffrement. Il crypte des morceaux de données et obscurcit les données grâce à plusieurs séries d'opérations de substitution et de permutation. L'algorithme AES accepte trois longueurs de clé : 128 bits, 192 bits et 256 bits. Dans cet article, nous utiliserons une clé de 128 bits par exemple pour une démonstration.
  2. Préparation de l'environnement
    Avant de commencer, nous devons préparer l'environnement suivant :
  3. Environnement de développement Java (JDK)
  4. Outils de développement Java (tels qu'Eclipse ou IntelliJ IDEA)
  5. Bibliothèque Java pour l'algorithme de chiffrement AES
  6. 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;
  7. 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;
     }
    }
  8. 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();
         }
     }
    }
  9. Conclusion
    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. Avec l'exemple de code ci-dessus, nous pouvons crypter les données sensibles et les décrypter si nécessaire. En apprenant et en comprenant ces connaissances, nous pouvons mieux protéger la sécurité des données et les appliquer aux scénarios correspondants dans le développement réel.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn