.Net RNGCryptoServiceProvider类与Win32 CryptGenRandom()函数

时间:2010-11-22 21:41:23

标签: .net winapi cryptography random cryptoapi

我有一个用.Net编写的新应用程序。我还有一个必须维护的应用程序的旧版本(同时),它已用VB6编写并使用C ++ DLL。某些C ++本机DLL必须继续由新的.Net应用程序通过P / Invoke使用和共享。

传统应用程序目前使用随机数生成器,将替换为使用通过Win32 API提供的CryptGenRandom()函数。新的.Net应用程序具有相同的需求,可以使用RNGCryptoServiceProvider类。

问题: 在引擎盖下,.Net RNGCryptoServiceProvider类是否使用Win32 CryptGenRandom()函数?如果是这样,我会对可用文档的任何链接感兴趣。

1 个答案:

答案 0 :(得分:2)

实际上,.Net RNGCryptoServiceProvider类从“加密服务提供商”(CSP)获取随机数据(所以the documentation表示)。在CryptoAPI中,CSP是一个可加载的DLL,它提供一些加密服务,主要是私钥存储,签名计算......以及随机数生成。只有在CSP签名(通过Microsoft)并注册(通过写入某些特定的注册表项)时才能使用CSP。

CryptGenRandom()函数使用默认CSP(默认情况下注册为默认CSP,通常是操作系统自身附带的CSP之一)并在该CSP上调用CPGenRandom()函数。 RNGCryptoServiceProvider也是如此。因此,它调用CryptGenRandom(),但它以相同的加密强源为基础。