我试图用反射器研究SHA-256的计算。但是它进入了非托管代码。
我想找到的是.NET System.Security.Cryptography实现是否可以优化。以使用SIMD为例。
所以问题是-.NET 4.6+ SHA-256是否使用SIMD。如果不能,那么是否可以通过使用SIMD来提高性能,或者当前的实现几乎是最好的?
编辑:我当前使用的dll在Microsoft System.Security.Cryptography内部使用CAPI本机代码,并且它调用的代码是 unmanaged ,我无法找到其atm的源。.
托管实现https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/sha256managed.cs似乎未使用SIMD。
答案 0 :(得分:1)
我试图用反射器研究SHA-256的计算。但是它进入了非托管代码的某个地方。
.NET中的大多数密码仅仅是系统库提供的功能的包装。 .NET Framework中有一些历史例外(例如SHA256Managed),但.NET Core中不再存在(例如SHA256Managed is no longer managed,类型名称只是为了兼容性而存在)。
我想找到的是.NET System.Security.Cryptography实现是否可以优化。以使用SIMD为例。
System.Security.Cryptography是一个大型命名空间,其中包含许多不同的内容。既然您特别提到SHA-2-256,我们可以对其进行细分。
(评论:它使用avx2吗?avx512?)
Dunno。从理论上讲,您可以介入/反汇编本机实现并进行查找。我可以在AVX-512上找到的最早的处理器是 Intel Core i7-7800X,从2017年第二季度开始。我现在可以找到的最新的Windows FIPS CAVP证书是SHS#4253(3/9/2018),所以有机会Windows 10的最新版本中正在使用AVX-512。
(例如:sha256的avx2 / avx512)以及如何管理?
AFAIK,您不能;除了加入该团队(https://careers.microsoft.com)。
例如,我有使用sha256托管而不是Cng的Amazon.Glacier dll。我想使其使用我不需要的默认设置。
您需要让Amazon更改为使用SHA256.Create()
。真正没有一种改变别人代码的实用方法(除非它是接受贡献的开源代码,在这种情况下,您可以尝试直接改变它)。