sha256.TransformBlock在Win10 Universal App中

时间:2015-10-23 20:33:47

标签: c# .net win-universal-app sha256

我在.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相同的结果?

1 个答案:

答案 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();
}