AES расшифровывается в C#, когда шифрование не имело IV (вектор инициализации) - PullRequest
0 голосов
/ 12 февраля 2020

Поэтому мы используем встроенную команду MySQL для шифрования паролей, называемых AES_ENCRYPT. При желании вы можете использовать вектор инициализации. Тем не менее, это необязательно, поэтому мы не использовали его. Когда мы расшифровываем SQL, все работает отлично. Однако, если мы хотим расшифровать этот байтовый массив в C#, мы не сможем этого сделать, потому что для расшифровки C# требуется IV. Я пробовал null, но он просто взрывается.

В MySQL я могу сделать это: "ВЫБЕРИТЕ CAST (AES_DECRYPT ((ВЫБРАТЬ пароль из таблицы WHERE RecordID = 1}), ' KEY ') AS CHAR (100)); ")

Данные хранятся в типе данных BLOB-объектов. Если я получу эти данные в C# с помощью ORM или чего-то еще, мне нужно расшифровать этот байтовый массив. Однако невозможно расшифровать с правильным ключом, потому что мы никогда не использовали вектор инициализации.

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.

...