如果CPU具有AES扩展(如基于Haswell的CPU),是否有人知道.NET(> 4.0)的AesManaged Cryptography提供程序是否支持硬件加速?
如果有,有没有办法用代码确认?
答案 0 :(得分:3)
显然,.NET AesManaged
实现不是硬件加速的。搜索SO和Google表明AesCryptoServiceProvider
(它是操作系统加密的包装器)通常比AesManaged
实现慢得多。
然而,我发现AesCryptoServiceProvider
实际上更快,更快,就像数量级差异一样。我怀疑操作系统级别的实现实际上是将AES-NI指令交给CPU进行硬件加速。
我无法找到有关上述观察的任何文档,但如果我的怀疑是正确的,那么至少在运行64位Windows 8.1 Update 1的Core i7 4770 CPU上,AesCryptoServiceProvider
是硬件加速的。
性能观察是在上面的机器上,使用AesManaged
的8个AES CBC解密线程将最大化CPU并消耗数据所需的内存(即对于我们来说,32GB RAM经常被最大化)。完全相同的代码,但使用AesCryptoServiceProvider
的CPU核心平均大约30-40%,内存(私有工作字节)很少超过10GB。
要回答我自己的问题,请尝试AesCryptoServiceProvider
,尤其是在64位Windows 8.1 Update 1上。