0

AES を使用してデータを復号化および暗号化し、TCP を使用してネットワーク経由で送信しようとしています。私のアルゴリズムはこのように動作したかった:

暗号化:

  1. パディングとして2 つの base64 化されたソルトを生成!します (例: !9W5AQcaNjaWF2Q!)
  2. メッセージをこう並べる [salt][data][salt]
  3. AES/CBC/PKCS5Padding、128 ビットのキー長でメッセージを暗号化
  4. [識別子][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;
}

これらの関数を変更して、適切な暗号化/復号化を行うにはどうすればよいですか?

4

0 に答える 0