2010-11-22 4 views
2

Ich habe eine neue Anwendung geschrieben in .Net. Ich habe auch eine ältere Version der Anwendung, die (in der Zwischenzeit) gepflegt werden muss, die in VB6 geschrieben wurde und C++ DLLs verwendet. Bestimmte native C++ - DLLs müssen weiterhin von der neuen .Net-Anwendung über P/Invoke verwendet und gemeinsam genutzt werden..Net RNGCryptoServiceProvider-Klasse im Vergleich zu Win32 CryptGenRandom() -Funktion

Die Legacy-App verwendet derzeit einen Zufallszahlengenerator, der zur Verwendung der CryptGenRandom() - Funktion ersetzt wird, die über Win32-APIs verfügbar ist. Die neue .Net-App hat den gleichen Bedarf und kann die RNGCryptoServiceProvider-Klasse verwenden.

Frage: Unter der Haube wird die .Net RNGCryptoServiceProvider Klasse der Win32 CryptGenRandom() Funktion nutzen? In diesem Fall würde ich mich für Links zu verfügbaren Dokumenten interessieren.

Antwort

2

Tatsächlich erhält die .Net RNGCryptoServiceProvider Klasse zufällige Daten von einem "Cryptographic Service Provider" (CSP) (so sagt the documentation). In der CryptoAPI ist ein CSP eine ladbare DLL, die einige kryptografische Dienste bereitstellt, hauptsächlich privaten Schlüsselspeicher, Signaturberechnungen ... und auch die Erzeugung von Zufallszahlen. Ein CSP kann nur verwendet werden, wenn er (von Microsoft) signiert und registriert wurde (indem Sie in bestimmte Registrierungsschlüssel schreiben).

Die Funktion CryptGenRandom() verwendet den Standard-CSP (den standardmäßig registrierten, normalerweise einen der CSP, die mit dem Betriebssystem selbst geliefert werden) und ruft die CPGenRandom()-Funktion für diesen CSP auf. RNGCryptoServiceProvider macht das gleiche. Daher tut es nicht Anruf CryptGenRandom(), aber es ernährt sich auf der gleichen kryptographisch starken Quelle.

+1

'CryptGenRandom()' verwendet den CSP, der durch seinen ersten Parameter 'hProv' angezeigt wird. –