我试着用反射镜研究SHA-256的计算。但它会进入一些非托管代码。
我要找的是.NET System.Security.Cryptography实现是否可以优化。例如使用SIMD。
所以问题是- .NET 4.6+ SHA-256是否使用SIMD?如果没有,是否可以通过使用SIMD来提高性能,或者目前的实现几乎是最好的?
编辑:我目前使用的dll是在Microsoft System.Security.Cryptography中使用CAPI本机代码,它调用的代码是非托管,我找不到它的源代码。
托管实现https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/sha256managed.cs似乎没有使用SIMD。
发布于 2019-01-04 17:35:20
我试着用反射镜研究SHA-256的计算。但它会进入一些非托管代码。
.NET中的大多数密码学只是系统库提供的功能的包装器。.NET框架中有一些历史异常(例如SHA256Managed),但这些异常在.NET核心中不再存在(例如,SHA256Managed不再被管理,类型名称只是为了兼容性而存在)。
我要找的是.NET System.Security.Cryptography实现是否可以优化。例如使用SIMD。
System.Security.Cryptography是一个很大的名称空间,其中包含许多不同的东西。既然你特别提到了SHA-2-256,我们可以把它分解一下。
(注释:它使用avx2吗?)avx512?)
不知道。从理论上讲,您可以进入/分解本机实现并找到答案。我在AVX-512中能找到的最老的处理器是英特尔核心i7-7800X,它来自Q2 2017。我现在能找到的最新的用于Windows的FIPS证书是SHS#4253 (3/9/2018),所以AVX-512有可能在Windows10的最新版本上使用。
(re: avx2 2/avx2 512,用于sha256),我该如何处理呢?
AFAIK,你不能;除了加入那个团队(https://careers.microsoft.com)。
例如,我有Amazon.Glacier dll,它使用sha256托管而不是Cng。我想让它使用我需要的东西,而不是默认设置使用的东西。
你需要让亚马逊转而使用SHA256.Create()。没有一种实际的方法来改变其他人的代码(除非它是开放源码的,接受贡献.在这种情况下,您可以尝试直接更改它)。
https://stackoverflow.com/questions/54007950
复制相似问题