私の目的は、cipher text
を使用してテキストファイル(AES algorithm
)を暗号化するJavaプログラムを作成することです。次に、その暗号化ファイル(cipher text
)プレーンテキストを元に戻します。暗号化と復号化のプロセスに同じキー(同じキーを1回生成し、どこかに保存して、暗号化と復号化プログラムの両方で使用)を使用したい。キーを生成して実行する場合同じプログラム内で1行ずつ暗号化と復号化を行うと、完全に機能します。そのための機能するコードスニペットは次のとおりです。
String strDataToEncrypt = new String();
String strCipherText = new String();
String strDecryptedText = new String();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE,secretKey);
strDataToEncrypt = "any text input";
byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt);
strCipherText = new BASE64Encoder().encode(byteCipherText);
System.out.println("cipher text: " +strCipherText);
aesCipher.init(Cipher.DECRYPT_MODE,secretKey,aesCipher.getParameters());
byte[] byteDecryptedText = aesCipher.doFinal(new BASE64Decoder().decodeBuffer(strCipherText));
strDecryptedText = new String(byteDecryptedText);
System.out.println("plain text again: " +strDecryptedText);
ただし、暗号化と復号化のために2つの異なるプログラム(Javaファイル)が必要です。だから、どういうわけかキーを生成してどこかに保存する必要があります。次に、暗号化プログラムと復号化プログラムの両方に同じキーを使用します。どうやってやるの?
EDIT_1
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
byte[] encoded = secretKey.getEncoded();
System.out.println("key: "+encoded);// key: [B@52b2a2d8
上記のプログラムを使用して、エンコードされたキー値を取得できます。しかし、私の質問は、復号化プログラムでこの値を使用してSecretKeyを生成する方法ですか?
onebyte[]
配列の値を16進数で出力する方法は次のとおりです。
byte[] a = {-120, 17, 42,121};
for (byte b : a)
{
System.out.printf("%2X",b);
}
System.out.println();