Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма с использованием TripleDesImplementation в ядре asp.net.
Мы используем ядро 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, но теперь выдает ошибку.
0 ответов
Может быть слишком поздно, .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