2010-11-22 36 views
2

我有一個新的應用程序正在編寫.Net。我還有一個必須維護的應用程序的舊版本(同時),它是用VB6編寫的並使用C++ DLL。某些C++本機DLL必須通過P/Invoke繼續被新的.Net應用程序使用和共享。.Net RNGCryptoServiceProvider類與Win32 CryptGenRandom()函數

傳統應用程序當前使用隨機數生成器,它將被替換爲使用可通過Win32 API獲取的CryptGenRandom()函數。新的.Net應用程序具有相同的需求,可以使用RNGCryptoServiceProvider類。

問題: 引擎蓋下的不淨RNGCryptoServiceProvider類利用在Win32 CryptGenRandom()函數?如果是這樣,我會對這方面的可用文檔的任何鏈接感興趣。

回答

2

實際上,.Net RNGCryptoServiceProvider類從「加密服務提供程序」(CSP)獲得隨機數據(所以說the documentation)。在CryptoAPI中,CSP是一個可加載的DLL,它提供了一些加密服務,主要是私鑰存儲,簽名計算以及隨機數生成。 CSP只有在已經簽名(由Microsoft)和註冊(通過寫入某些特定的註冊表項)才能使用。

CryptGenRandom()函數使用默認的CSP(默認使用的CSP,通常是操作系統自帶的CSP之一),並調用該CSP的CPGenRandom()函數。 RNGCryptoServiceProvider也一樣。因此,它不是而是調用CryptGenRandom(),但它是以相同的加密強度來源提供的。

+1

`CryptGenRandom()`使用由其第一個參數`hProv`指示的CSP。 – 2010-11-26 18:22:55