AES を使用してデータを復号化および暗号化し、TCP を使用してネットワーク経由で送信しようとしています。私のアルゴリズムはこのように動作したかった:
暗号化:
- パディングとして2 つの base64 化されたソルトを生成
!
します (例: !9W5AQcaNjaWF2Q!) - メッセージをこう並べる [salt][data][salt]
- AES/CBC/PKCS5Padding、128 ビットのキー長でメッセージを暗号化
- [識別子][base64 メッセージ] を送信
ただし、base-64 メッセージを復号化しようとすると、最初の 128 ビットにはソルトが含まれず、ランダム データが含まれます。
メッセージを復号化しようとすると、最初の 128 ビットがゴミのように見えることに気付きます (これらは 128 ビットであると確信しています)。
私が期待するもの(256ビットソルト)
!R6NYI2DxsRt4Fb6PKZA+Itr0D5jqFo!ayy!CcHGYvN/1vW79KemKLQ39OjVcGI/3y!
私が得るもの
�*M�y��n�']e_PKZA+Itr0D5jqFo!ayy!CcHGYvN/1vW79KemKLQ39OjVcGI/3y!
また、ここに暗号化と復号化のための私のコードがあります
復号化
private byte[] decryptAES(SecretKeySpec key, byte[] text) {
byte[] decryptedText = null;
try {
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
decryptedText = cipher.doFinal(text);
} catch (GeneralSecurityException e) {
System.out.println("[WARNING] Could not decrypt data, wrong key?");
}
return decryptedText;
}
暗号化
private byte[] encryptAES(SecretKeySpec key, byte[] text) {
byte[] encryptedText = null;
try {
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
encryptedText = cipher.doFinal(text);
} catch (GeneralSecurityException e) {
System.out.println("[ERROR] Could not encrypt data!");
e.printStackTrace();
}
return encryptedText;
}
これらの関数を変更して、適切な暗号化/復号化を行うにはどうすればよいですか?