2015-08-13 3 views
3

Я видел это во время кодирования и думал, что это казалось странным:Почему конструктор RNGCryptoServiceProvider игнорирует его параметр?

enter image description here

Конечно, MSDN говорит, что RNGCryptoServiceProvider(byte[] rgb) и RNGCryptoServiceProvider(string str) и игнорировать их параметры. Насколько я могу судить, практических различий между этими двумя и RNGCryptoServiceProvider() нет. Что происходит? Я подозреваю, что мне не хватает чего-то странного в криптографии.

+0

Что вы ожидаете от аргумента? –

+1

@NikBougalis Я ожидал бы одну из двух вещей; либо аргумент был бы начальным значением, либо они не предоставили бы бесполезные конструкторы. Поскольку ни один из них не верен, я смущен. – sirdank

ответ

1

Это, вероятно, осталось от предыдущей более старой версии, возможно, вернувшись до 1.x, так как даже API 2.0 содержит одно и то же описание. Однако вполне возможно, что API 2.0 и 2.1 изменились в среднем.

Если вы посмотрите на исходный код Mono, то вы найдете

_handle = RngInitialize (rgb); 

и

_handle = RngInitialize (Encoding.UTF8.GetBytes (str)); 

поэтому я полагаю, что эти данные были использованы в качестве дополнительного или исходных семенах для платформы при условии генератор случайных чисел , Это также имеет смысл. Источник Mono обычно следует за реализацией MS как можно больше.

Если платформа, оснащенная RNG, защищена, может быть мало необходимости высевать ее из приложения. Использование RNG как метода для создания одного и того же потока снова и снова (т. Е. Когда параметр используется как начальное семя) чревато опасностью, особенно если базовая реализация неизвестна и может отличаться между обновлениями платформы и системы. Таким образом, это было бы хорошей причиной для осуждения конструкторов.

Очевидно, что если они просто удалены, старые источники больше не будут компилироваться. Поэтому логичнее оставить реализацию пустым, поскольку в результате экземпляр должен генерировать случайные данные в любом случае.


В конце концов, это всего лишь (очень) образованное предположение, но причина не указана в текущей документации API. Конструкторы не обозначены как устаревшие, либо кажется. Все, что я ожидал от документации API криптографии Microsoft, другими словами.

Смежные вопросы