如何在.NET中使用CNG(或AES-NI启用的指令集)?

我目前使用AES在c#中执行大量文本加密/解密。

使用纯软件系统,对于需要解密的大量数据集,可能需要相当长的处理器才能获得相当长的时间。 我知道英特尔已经推出了他们的AES-NI指令集,AMD已经推出了类似的产品。

我正在使用.NET 4.0,我知道windows CNG框架使用了这些指令集,但似乎.NET世界中的AesManaged没有这样做。

有一个梦幻般的项目“ CLR安全 ”,它建立了从.NET 3.5到Windows CNG的网关,但它没有在一年内维护,我宁愿不(如果可能的话)跳上一个垂死的项目。

在.NET 4中有一个CNGProvider类,但似乎没有足够的文档可以将AES的工作解密拼凑在一起。

有没有人有这方面的经验,他们可以指出我在正确的方向上如何在纯.NET环境中使用预先制作的类实现AES-NI,而无需直接从c#进行ap / inv? (如果有一个包装器类,只要它被维护就可以了)。

那么AesCryptoServiceProvider呢? 它说使用CAPI,所以希望CNG如果可用的话。 – Rup

这个评论有很大的帮助,经过一些挖掘,看起来像AesCryptoServiceProvider将使用AES-NI如果可用,我看不到微软的任何“官方”文档,但是当运行简单的时序基准测试时差异大约快15倍,因此要么API本身是大规模优化的(增加15倍是非常好的优化)或它使用AES-NI指令集。

Unfortunatley我没有非AES-NI盒子可供测试,但是如果我得到一个,我会用结果更新这个post。

所以我非常有信心这是用于AES-NI的API,但如果没有进一步的测试就无法保证。