Я пытаюсь преобразовать класс шифрования из VB.NET Framework в C # .Net Standard, и по какой-то причине я получаю сообщение об ошибке, как показано ниже, при вызове метода CreateEncryptor для экземпляра RijndaelManaged в C #.
Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма.Имя параметра: rgbIV
Это рабочий код VB.NET
Dim password As PasswordDeriveBytes = New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
#Disable Warning BC40000 ' Type or member is obsolete
Dim keyBytes() As Byte = password.GetBytes(keySize / 8)
#Enable Warning BC40000 ' Type or member is obsolete
Dim symmetricKey As RijndaelManaged = New RijndaelManaged
If (initVectorBytes.Length = 0) Then
symmetricKey.Mode = CipherMode.ECB
Else
symmetricKey.Mode = CipherMode.CBC
End If
encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)
И это ошибочный код C #
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
byte[] keyBytes = password.GetBytes((int)(keySize / (double)8));
RijndaelManaged symmetricKey = new RijndaelManaged();
if ((initVectorBytes.Length == 0))
symmetricKey.Mode = CipherMode.ECB;
else
symmetricKey.Mode = CipherMode.CBC;
encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
В значении C # keyBytesотображается как «byte [32]» и initVectorBytes как «byte [0]»
В VB значение keyBytes отображается как «Length = 32», а initVectorBytes как «Length = 0»
Шагнувчерез код в обеих версиях единственное различие, которое я вижу в данных, заключается в том, что IVValue и KeyValue отсутствуют в объекте symbricKey.
Что мне нужно сделать, чтобы это исправить?