Javaは、 java.security
パッケージとそのサブパッケージ内の堅牢な暗号APIのセットを提供します。これらのAPIにより、開発者は暗号化や復号化など、さまざまな暗号操作を実行できます。関係するコアクラスは、 Cipher
、 SecretKey
、 SecretKeyFactory
、およびKeyGenerator
です。対称暗号化に使用する方法の内訳(AESを使用)は次のとおりです。
1。キー生成:
まず、秘密の鍵を生成する必要があります。このキーは、暗号化と復号化の両方に非常に重要です。次のコードスニペットは、256ビットAESキーを生成する方法を示しています。
<code class="java">import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; public class AESEncryption { public static void main(String[] args) throws NoSuchAlgorithmException { // Generate a 256-bit AES key KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom()); SecretKey secretKey = keyGenerator.generateKey(); // ... (rest of the code for encryption and decryption) ... } }</code>
2。暗号化:
キーができたら、 Cipher
クラスを使用してデータを暗号化できます。次のコードは、PKCS5パディングを使用してCBCモードでAESを使用して文字列を暗号化する方法を示しています。
<code class="java">import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.Arrays; // ... (previous code for key generation) ... byte[] iv = new byte[16]; // Initialization Vector (IV) - must be randomly generated new SecureRandom().nextBytes(iv); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec); byte[] encryptedBytes = cipher.doFinal("This is my secret message".getBytes()); String encryptedString = Base64.getEncoder().encodeToString(iv) Base64.getEncoder().encodeToString(encryptedBytes); //Combine IV and encrypted data for later decryption System.out.println("Encrypted: " encryptedString); } }</code>
3。復号化:
復号化は暗号化に似ていますが、 Cipher.DECRYPT_MODE
を使用します。同じキー、IV、およびアルゴリズムのパラメーターを使用することを忘れないでください。
<code class="java">// ... (previous code for key generation and encryption) ... String[] parts = encryptedString.split("\\s "); // Split the string into IV and encrypted data byte[] decodedIv = Base64.getDecoder().decode(parts[0]); byte[] decodedEncryptedBytes = Base64.getDecoder().decode(parts[1]); IvParameterSpec ivParameterSpecDec = new IvParameterSpec(decodedIv); Cipher decipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); decipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpecDec); byte[] decryptedBytes = decipher.doFinal(decodedEncryptedBytes); System.out.println("Decrypted: " new String(decryptedBytes)); } }</code>
生産環境で例外を適切に処理することを忘れないでください。この例は、基本的な図を提供します。より複雑なシナリオについては、キーストアやその他のセキュリティベストプラクティスの使用を検討してください。
安全なキー管理は、暗号化において最も重要です。侵害されたキーは、暗号化を役に立たないようにします。ここにいくつかのベストプラクティスがあります:
SecureRandom
のような暗号化的に安全な乱数ジェネレーター(CSPRNG)を使用します。アルゴリズムの選択は、特定のセキュリティニーズと制約に依存します。簡単な概要は次のとおりです。
対称暗号化(機密性のため):
非対称暗号化(機密性とデジタル署名用):
ハッシュ(整合性と認証用):
デジタル署名(認証と非控除用):
システムが最新のセキュリティアドバイザリーを効率的に処理し、最新の状態に保つことができる最強のアルゴリズムを常に使用することを忘れないでください。
いくつかの一般的な落とし穴は、暗号化の実装のセキュリティを弱める可能性があります。
SecureRandom
のようなcsprngを常に使用してください。これらの落とし穴を慎重に検討し、ベストプラクティスに従うことにより、Java暗号化の実装のセキュリティを大幅に改善できます。セキュリティは継続的なプロセスであり、最新のセキュリティアドバイザリとベストプラクティスを最新の状態に保つことが重要であることを忘れないでください。
以上が暗号化と復号化にJavaの暗号APIを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。