我在.NET 4.5中有这个工作代码:
var sha256 = System.Security.Cryptography.SHA256.Create();
var message = new byte[] {1, 2, 3};
var s = new byte[32];
var m = sha256.ComputeHash(message);
sha256.TransformBlock(m, 0, m.Length, m, 0);
sha256.TransformFinalBlock(s, 0, s.Length);
var x = sha256.Hash; // x = {236, 196, 174, 128, 243....}
我试图在通用Windows 10应用程序中复制它。 但是我在新的.NET库中的SHA256对象上找不到TransformBlock / TransformFinalBlock函数。 我已经为版本4.0.0-beta-23409 of System.Security.Cryptography.Algorithms添加了依赖项。而我得到的错误是:
错误CS1061:' SHA256'不包含' TransformBlock'的定义没有扩展方法' TransformBlock'接受类型' SHA256'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
错误CS1061:' SHA256'不包含' TransformFinalBlock'的定义并且没有扩展方法' TransformFinalBlock'接受类型' SHA256'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
错误CS1061:' SHA256'不包含' Hash'的定义没有扩展方法' Hash'接受类型' SHA256'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
如何获得与.NET 4.5相同的结果?
答案 0 :(得分:0)
该解决方案在另一个类IncrementalHash中找到。 显然,微软想要分离有状态(TransformBlock和TransformFinalBlock)和"无状态" (ComputeHash)HashAlgorithm的一部分,因为它们没有很好的隔离。
无论如何,这里是如何在通用Windows 10应用程序中复制代码:
var message = new byte[] { 1, 2, 3 };
var s = new byte[32];
byte[] m;
byte[] x;
using (HashAlgorithm sha256 = SHA256.Create())
{
m = sha256.ComputeHash(message);
}
using (IncrementalHash sha256 = IncrementalHash.CreateHash(HashAlgorithmName.SHA256))
{
sha256.AppendData(m);
sha256.AppendData(s);
x = sha256.GetHashAndReset();
}