代码之家  ›  专栏  ›  技术社区  ›  Elan

.Net RNGCryptoServiceProvider类与Win32 CryptGenRandom()函数

  •  2
  • Elan  · 技术社区  · 15 年前

    我有一个新的应用程序正在.Net中编写。我也有一个必须维护的应用程序的传统版本(同时),它已经用VB6编写并使用C++ DLL。某些C++原生DLL必须通过P/Unjk继续被新的.NET应用程序使用和共享。

    遗留应用程序目前使用随机数生成器,该生成器将被替换为使用可通过win32api获得的CryptGenRandom()函数。新的.Net应用程序也有同样的需求,可以利用RNGCryptoServiceProvider类。

    问题: 在幕后,.Net RNGCryptoServiceProvider类是否利用了Win32 CryptGenRandom()函数?如果是的话,我会感兴趣的任何有关这方面的现有文件的链接。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Thomas Pornin    15 年前

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

    这个 CryptGenRandom() 函数使用默认CSP(默认情况下注册为使用的CSP,通常是操作系统本身附带的CSP之一),并调用 CPGenRandom() 在CSP上运行。 RNGCryptoServiceProvider提供程序 做同样的事。因此,它确实 不 呼叫 加密随机() ,但它以相同的加密强源为食。

    推荐文章