[当加密没有IV(初始向量)时,在C#中进行AES解密

问题描述 投票:0回答:1

因此,我们使用MySQL内置命令来加密称为AES_ENCRYPT的密码。您可以选择在其中使用初始化向量。但是,它是可选的,因此我们没有使用。当我们使用SQL解密时,效果很好。但是,如果我们想在C#中解密该字节数组,则不能,因为C#解密器需要IV。我尝试了null,但它只是爆炸了。

在MySQL中,我可以这样做:“ SELECT CAST(AES_DECRYPT((从表WHERE RecordID = 1的SELECT密码),'KEY')AS CHAR(100);”)

数据以Blob数据类型存储。如果我使用ORM或其他方式在C#中获取该数据,则需要解密该字节数组。但是,无法使用正确的密钥解密,因为我们从未使用过初始化向量。

C#

using (Aes aesFactory = Aes.Create())
{
    aesFactory.Key = key;

    // Create a decryptor to perform the stream transform.
    ICryptoTransform decryptor = aesFactory.CreateDecryptor(aesFactory.Key, aesFactory.IV);

    // Create the streams used for decryption.
    using (MemoryStream stream = new MemoryStream())
    {
        using (CryptoStream decryptStream = new CryptoStream(stream, decryptor, CryptoStreamMode.Write))
        {
            decryptStream.Write(encryptedText, 0, encryptedText.Length);
            decryptedText = Encoding.ASCII.GetString(stream.ToArray());
        }
    }
}

return decryptedText;

C#代码可能不是100%准确,我用流尝试了许多不同的变体,但真正的问题实际上是CreateDecryptor函数和IV。

c# mysql encryption aes
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.