ホームページ >Java >&#&チュートリアル >Javaを使用してAES暗号化アルゴリズムを実装する方法

Javaを使用してAES暗号化アルゴリズムを実装する方法

WBOY
WBOYオリジナル
2023-09-19 14:54:241587ブラウズ

Javaを使用してAES暗号化アルゴリズムを実装する方法

Java を使用して AES 暗号化アルゴリズムを実装する方法

はじめに:
ネットワーク アプリケーションとデータ送信のプロセスでは、データ セキュリティが非常に重要です。暗号化アルゴリズムは、データのセキュリティを保護する重要な手段の 1 つです。 AES (Advanced Encryption Standard) は、現在最も一般的に使用されている対称暗号化アルゴリズムの 1 つであり、高いセキュリティ、効率性、柔軟性を備えています。この記事では、Java プログラミング言語を使用して AES 暗号化アルゴリズムを実装し、データのセキュリティを保護する方法を紹介します。

  1. AES 暗号化アルゴリズムの概要
    AES 暗号化アルゴリズムは、暗号化と復号化に同じキーを使用する対称キー暗号化アルゴリズムです。データ チャンクを暗号化し、複数回の置換および並べ替え操作を通じてデータを難読化します。 AES アルゴリズムは、128 ビット、192 ビット、256 ビットの 3 つのキー長を受け入れます。この記事では、デモの例として 128 ビット キーを使用します。
  2. 環境の準備
    開始する前に、次の環境を準備する必要があります。
  3. Java 開発環境 (JDK)
  4. Java 開発ツール (Eclipse や IntelliJ IDEA など) )
  5. AES 暗号化アルゴリズム用の Java ライブラリ
  6. 関連ライブラリのインポート
    Java を使用して AES 暗号化アルゴリズムを実装する前に、関連するライブラリ ファイルをインポートする必要があります。 Java では、javax.crypto ライブラリを使用して AES 暗号化アルゴリズムを実装できます。次のライブラリ ファイルをインポートする必要があります:

    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. 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. 使用例
    これで、使用できるようになります。上記の実装では、データの暗号化と復号化に AES 暗号化アルゴリズムが使用されます。

    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. 結論
    この記事では、Java プログラミング言語を使用して AES 暗号化アルゴリズムを実装し、データのセキュリティを保護する方法を紹介します。上記のサンプル コードを使用すると、機密データを暗号化し、必要に応じて復号化できます。この知識を学び理解することで、データのセキュリティをより適切に保護し、実際の開発の対応するシナリオに適用できるようになります。

以上がJavaを使用してAES暗号化アルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。