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