RNGCryptoServiceProvider.GetBytes () возвращает все нули - PullRequest
2 голосов
/ 05 марта 2020

Я использую следующий код для генерации соли шифрования.

TripleDES tripleDES = TripleDES.Create()
tripleDES.IV = new byte[8];

using (RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider())
{
    rngProvider.GetBytes(tripleDES.IV);
}

Rfc2898DeriveBytes keyBytes = new Rfc2898DeriveBytes(Password, tripleDES.IV);
tripleDES.Key = keyBytes.GetBytes(16);

Но после вызова GetBytes() я вижу, что tripleDES.IV содержит все нули.

Это конечно, не кажется таким случайным, как предполагает документация.

1 Ответ

3 голосов
/ 05 марта 2020

Глядя на источник SymmetricAlgorithm (базовый класс для TripleDES), свойство IV возвращает клон текущего байтового массива IV, поэтому rngProvider.GetBytes() устанавливает байты на массиве клонов, а не на фактическом.

Вам все равно не нужно устанавливать случайное значение IV - оно будет инициализировано равным единице уже после вызова TripleDES.Create(). И если по какой-то причине вам нужен новый, вы можете просто позвонить GenerateIV(), чтобы установить IV в новое случайное значение.

...