Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма с использованием TripleDesImplementation в ядре asp.net. - PullRequest
0 голосов
/ 05 октября 2018

Мы используем ядро ​​Asp.Net с алгоритмом шифрования TripleDesImplementation.

Код расшифровки выглядит следующим образом:

public static string Encrypt(string p_szStrValue)
{
    string vszEncryptedString = string.Empty;
    if (!p_szStrValue.Trim().Equals(string.Empty))
    {
        TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_192, IV_192), CryptoStreamMode.Write);
        StreamWriter sw = new StreamWriter(cs);
        sw.Write(p_szStrValue);
        sw.Flush();
        cs.FlushFinalBlock();
        ms.Flush();
        vszEncryptedString = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
    }
    return vszEncryptedString;
}

public static string Decrypt(string p_szStrValue)
{
    string vszDecryptedString = string.Empty;
    if (!p_szStrValue.Trim().Equals(string.Empty))
    {
        try
        {
            TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
            byte[] v_Buffer = Convert.FromBase64String(p_szStrValue);
            MemoryStream ms = new MemoryStream(v_Buffer);
            CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_192, IV_192), CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs);
            vszDecryptedString = sr.ReadToEnd();
        }
        catch (Exception e)
        {
            return e.Message;
        }
    }
    return vszDecryptedString;
}

Но при расшифровке выдает ошибку, как показано ниже:

Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма.
Имя параметра: rgbIV

Он работал в обычной Asp.Netвеб-сайт, но теперь выдает ошибку.

1 Ответ

0 голосов
/ 15 августа 2019

Может быть слишком поздно, .Net Core не выполняет автоматическое усечение вектора инициализации, как .Net Framework.Вот почему вы стареете, когда получаете ошибку.Вы можете использовать первые 8 байтов из вашего IV для расшифровки, он должен работать и правильно расшифровывать существующую зашифрованную информацию.

Суть - это вектор инициализации TripleDESCryptoServiceProvider (либо свойство IV, либо параметр rbgIV в методах CreateEncryptor и CreateDecryptor) принимает массив байтов.В .NET Core этот байтовый массив для IV должен быть равен допустимому размеру блока алгоритма.Для 3DES это 64-битный (8 байт).

. В .NET Framework он будет просто использовать первые 8 байт, даже если вы дадите ему 9 или 20.

КогдаПри переходе с .NET Framework на .NET Core пользователи, ошибочно передававшие более 8 байт, стали получать исключения.Чтобы исправить это, просто измените код во время миграции, чтобы передать только первые 8 байтов.

Дополнительная информация о проблеме GitHub https://github.com/dotnet/docs/issues/8184

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...