AES解密,第一块垃圾

时间:2015-11-21 19:59:50

标签: java cryptography aes encryption-symmetric cbc-mode

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

加密:

  1. 生成两个带有!的base64< d盐作为填充(例如!9W5AQcaNjaWF2Q!)
  2. 以这种方式排列信息[盐] [数据] [盐]
  3. 使用AES / CBC / PKCS5Padding加密消息,128位密钥长度
  4. 发送[标识符] [base64-message]
  5. 但是,如果我尝试解密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;
    }
    

    如何修改这些功能以进行正确的加密/解密?

0 个答案:

没有答案