因此,我们使用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。