2

我已经使用 AES 在 C# 中解密了字符串“12345678901234567890123456789012”

该字符串为 32 个字节,生成的“数组”(参见代码)长度为 48,因此两者都是 16 的偶数倍。

关键是“b14ca5898a4e4133bbce2ea2315a1916”

    public static string EncryptString(string key, string plainInput)
    { 
        byte[] emptyIv = new byte[16];
        byte[] array;
        List<byte> result;
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.Mode = CipherMode.CBC;
            aes.BlockSize = 128;
            aes.Padding = PaddingMode.PKCS7;
            //aes.GenerateIV(); 
            aes.IV = emptyIv;

            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter streamWriter = new StreamWriter((Stream)cryptoStream))
                    {
                        streamWriter.Write(plainInput);
                    }

                    array = memoryStream.ToArray();
                }
            }

            result = new List<byte>(aes.IV);       #EDIT AFTER COMMENT
            result.AddRange(new List<byte>(array));#EDIT AFTER COMMENT
        } 
        return Base64UrlEncoder.Encode(result.ToArray());           
    }

我试图在我的 python 代码中解密它

import base64
import hashlib
from Cryptodome import Random
from Cryptodome.Cipher import AES

#...

def decrypt( self, encryptedB64):         
    encrypted = base64.b64decode(encryptedB64 + '===')
    iv = encrypted[:AES.block_size]
    cipher = AES.new(self.key, AES.MODE_CBC, iv ) 
    decrypted = cipher.decrypt(encrypted[AES.block_size:]) #<-- error on this line
    return AESEncryptionHelper._unpad(decrypted)

当我尝试解密它时 (cipher.decrypt(...) 我收到错误消息:

“在 CBC 模式下,数据必须填充到 16 字节边界”。

我已经读过数据必须是 16 倍数,但我不清楚哪些数据需要是 16 倍数。

我已将生成的(base64 编码的)加密字符串粘贴到该网站中(无 IV、256 位、CBC 模式,请参见上面的密钥),并且效果很好。

所以为了简短起见,我做错了什么?

4

0 回答 0