Rumah >Java >javaTutorial >Bagaimana untuk melaksanakan algoritma penyulitan AES menggunakan java

Bagaimana untuk melaksanakan algoritma penyulitan AES menggunakan java

WBOY
WBOYasal
2023-09-19 14:54:241586semak imbas

Bagaimana untuk melaksanakan algoritma penyulitan AES menggunakan java

Cara menggunakan java untuk melaksanakan algoritma penyulitan AES

Pengenalan:
Dalam proses aplikasi rangkaian dan penghantaran data, keselamatan data adalah penting. Algoritma penyulitan adalah salah satu cara penting untuk melindungi keselamatan data. AES (Advanced Encryption Standard) ialah salah satu daripada algoritma penyulitan simetri yang paling biasa digunakan pada masa ini, dengan keselamatan yang tinggi, kecekapan dan fleksibiliti. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan Java untuk melaksanakan algoritma penyulitan AES untuk melindungi keselamatan data.

  1. Pengenalan kepada algoritma penyulitan AES
    Algoritma penyulitan AES ialah algoritma penyulitan kunci simetri yang menggunakan kunci yang sama untuk penyulitan dan penyahsulitan. Ia menyulitkan ketulan data dan mengaburkan data melalui berbilang pusingan operasi penggantian dan pilih atur. Algoritma AES menerima tiga panjang kunci: 128 bit, 192 bit dan 256 bit. Dalam artikel ini, kami akan menggunakan kunci 128-bit sebagai contoh demonstrasi.
  2. Persediaan alam sekitar
    Sebelum bermula, kita perlu menyediakan persekitaran berikut:
  3. Java Development Environment (JDK)
  4. #🎜 Development🎜#Java Development Alat ( Seperti Eclipse atau IntelliJ IDEA)
  5. Pustaka Java untuk algoritma penyulitan AES
  6. Import perpustakaan berkaitan

    Sebelum menggunakan penyulitan AES ke ion algoritma, kami memerlukan Import fail perpustakaan berkaitan. Di Java, algoritma penyulitan AES boleh dilaksanakan menggunakan perpustakaan javax.crypto. Kami perlu mengimport fail perpustakaan berikut:

    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. Melaksanakan kaedah penyulitan dan penyahsulitan 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;
     }
    }

    #🎜🎜🎜🎜##🎜 contoh# 🎜🎜#Kini kita boleh menggunakan algoritma penyulitan AES yang dilaksanakan di atas untuk menyulitkan dan menyahsulit data.
  8. 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. Kesimpulan
    Artikel ini memperkenalkan cara menggunakan bahasa pengaturcaraan Java untuk melaksanakan algoritma penyulitan AES untuk melindungi keselamatan data. Dengan kod sampel di atas, kami boleh menyulitkan data sensitif dan menyahsulitnya apabila diperlukan. Dengan mempelajari dan memahami pengetahuan ini, kami dapat melindungi keselamatan data dengan lebih baik dan menerapkannya pada senario yang sepadan dalam pembangunan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma penyulitan AES menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn