0

我正在尝试使用 AES 解密和加密数据,并使用 TCP 通过网络发送数据。我希望我的算法以这种方式工作:

加密:

  1. 生成两个带!填充的 base64 盐(例如!9W5AQcaNjaWF2Q!)
  2. 以这种方式排列消息 [salt][data][salt]
  3. 使用 AES/CBC/PKCS5Padding 加密消息,128 位密钥长度
  4. 发送[标识符][base64-message]

但是,如果我尝试解密 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