关闭密码流时,C#中的DES解密错误“错误数据”

| 我尝试解密一个加密的字节数组(用K1加密和用K2解密)。当Visual Studio尝试关闭我的加密流时,抛出异常“ BAD DATA” 这是我的DES解密代码段
public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv)
    {
        MemoryStream ms = new MemoryStream();
        DES mDES = DES.Create();
        mDES.Key = key;
        mDES.IV = iv;
        mDES.Padding = PaddingMode.PKCS7;
        CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(cipherData, 0, cipherData.Length);
        cs.Close();
        Byte[] decryptedData = ms.ToArray();
        return decryptedData;
    }
初始向量与加密相同。我不知道为什么会发生此错误。 添加: 根据Greg B的建议,我在此处发布了我的加密代码段。加密的输出是解密的输入(两个不同的密钥)
        public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv)
    {
        MemoryStream ms = new MemoryStream();
        DES mDES = DES.Create();
        mDES.Key = key;
        mDES.IV = iv;
        mDES.Padding = PaddingMode.PKCS7;
        CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(cipherData, 0, cipherData.Length);
        cs.Close();
        Byte[] decryptedData = ms.ToArray();
        return decryptedData;
    }
    
已邀请:
您遇到的问题来自所选的填充模式。 由于在解密密文时使用填充,因此加密流会在您检索解密的字节时尝试删除填充。由于您不使用数据加密的密钥,因此将得到“垃圾”……加密流无法检测到需要删除的填充,并且操作失败,并观察到异常。 如果您想使用DES类来扩展3DES之类的内容,请使用PaddingMode NONE进行解密和随后的加密步骤(因此,只有第一个加密或最后一个解密使用填充)     

要回复问题请先登录注册