Home  >  Article  >  Java  >  How to implement AES encryption algorithm using java

How to implement AES encryption algorithm using java

WBOY
WBOYOriginal
2023-09-19 14:54:241493browse

How to implement AES encryption algorithm using java

How to use java to implement the AES encryption algorithm

Introduction:
In the process of network applications and data transmission, data security is crucial. Encryption algorithms are one of the important means to protect data security. AES (Advanced Encryption Standard) is one of the most commonly used symmetric encryption algorithms at present, with high security, efficiency and flexibility. This article will introduce how to use the Java programming language to implement the AES encryption algorithm to protect data security.

  1. Introduction to AES encryption algorithm
    The AES encryption algorithm is a symmetric key encryption algorithm that uses the same key for encryption and decryption. It encrypts data chunks and obfuscates the data through multiple rounds of substitution and permutation operations. The AES algorithm accepts three key lengths: 128 bits, 192 bits and 256 bits. In this article, we will use a 128-bit key for example demonstration.
  2. Environment preparation
    Before starting, we need to prepare the following environment:
  3. Java development environment (JDK)
  4. Java development tools (such as Eclipse or IntelliJ IDEA)
  5. Java library for AES encryption algorithm
  6. Import related libraries
    Before using Java to implement the AES encryption algorithm, we need to import the relevant library files. In Java, the AES encryption algorithm can be implemented using the javax.crypto library. We need to import the following library files:

    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. Implementing AES encryption and decryption methods

    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. Usage example
    Now we can use the above implementation The AES encryption algorithm is used to encrypt and decrypt data.

    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
    This article introduces how to use the Java programming language to implement the AES encryption algorithm to protect data security. With the above sample code, we can encrypt sensitive data and decrypt it when needed. By learning and understanding this knowledge, we can better protect data security and apply it to corresponding scenarios in actual development.

The above is the detailed content of How to implement AES encryption algorithm using java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn