2010-11-22 44 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