статический RNGCryptoServiceProvider — это безопасно и ориентировано на многопотоковое исполнение для генерации сессий и случайных паролей?

Вместо

$("#newP").focus();  

это должно использоваться:

window.location.href=window.location.href + "#newP";     
7
задан ikerbera 11 February 2019 в 12:24
поделиться

2 ответа

1) Если он криптографически безопасен, как и должно быть, то такого рода предположения не могут быть осуществимы.

2) С другой стороны, я предлагаю удалить экземпляр JIT в статическое свойство и вместо этого выполните следующее:

protected static readonly RandomNumberGenerator _rng = new RNGCryptoServiceProvider();
6
ответ дан 6 December 2019 в 15:25
поделиться

ГСЧ на основе CSP в CLR - это просто оболочка для CryptGenRandom . Как и все функции CSP, они работают с описателем контекста HCRYPTPROV . Если я правильно помню, первое, что делает провайдер при входе в «контекст», - это приобретает критическую секцию, которая защищает «контекст». Таким образом, хотя функция, скорее всего, стабильна для потоков, вам действительно следует использовать отдельную функцию для каждого потока, чтобы избежать конфликта.

Обновление

Согласно этому журналу MSDN CLR может использовать буфер экземпляра вместо буфера стека, что делает RNGCryptoServiceProvider небезопасным для потоков в будущих реализациях:

Обратите внимание, что, как в настоящее время реализовано в .NET Framework 2.0, конструктор без параметров RNGCryptoServiceProvider создает потокобезопасные экземпляры. Таким образом, мы мог бы создать нашего частного члена вместо этого быть частным статическим член, и при этом не обязательно создать новый RNGCryptoServiceProvider экземпляр для каждого экземпляра CryptoRandom. Однако это потокобезопасность в настоящее время не задокументировано и никоим образом не запечено в контракт класса или интерфейс. Учитывая это, у нас нет полагались на него в нашей реализации.

Обратите внимание, что это использование не связано с безопасностью потоков собственного API, проблема с буфером связана с оболочкой CLR. Кроме того, , если вы используете конструктор RNGCryptoServiceProvider, который принимает byte [], то он наверняка небезопасен .

9
ответ дан 6 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: