C# Win10通用应用程序中的sha256.TransformBlock
我在.NET 4.5中有以下工作代码:C# Win10通用应用程序中的sha256.TransformBlock,c#,.net,win-universal-app,sha256,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
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....}
我正试图在一个通用的Windows10应用程序中复制它。
但是,我在新的.NET库中的SHA256对象上找不到TransformBlock/TransformFinalBlock函数。
我在版本中添加了依赖项。我得到的错误是:
错误CS1061:“SHA256”不包含“TransformBlock”的定义,并且找不到接受类型为“SHA256”的第一个参数的扩展方法“TransformBlock”(是否缺少using指令或程序集引用?)
错误CS1061:“SHA256”不包含“TransformFinalBlock”的定义,并且找不到接受类型为“SHA256”的第一个参数的扩展方法“TransformFinalBlock”(是否缺少using指令或程序集引用?)
错误CS1061:“SHA256”不包含“哈希”的定义,并且找不到接受类型为“SHA256”的第一个参数的扩展方法“哈希”(是否缺少using指令或程序集引用?)
如何获得与.NET 4.5中相同的结果?在另一个类IncrementalHash中找到了解决方案。 显然,微软想要将HashAlgorithm的有状态(TransformBlock和TransformFinalBlock)和“无状态”(ComputeHash)部分分开,因为它们没有很好的隔离 无论如何,以下是如何在通用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();
}
在另一个类IncrementalHash中找到了解决方案。 显然,微软想要将HashAlgorithm的有状态(TransformBlock和TransformFinalBlock)和“无状态”(ComputeHash)部分分开,因为它们没有很好的隔离 无论如何,以下是如何在通用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();
}
为什么要同时调用
ComputeHash
和TransformBlock
?@ScottChamberlain这是一个非常好的问题。我对加密知之甚少。我从Java移植了代码,基本上是按照他们在原始代码中所做的一行一行地做。你为什么同时调用ComputeHash
和TransformBlock
?@ScottChamberlain这是一个非常好的问题。我对加密知之甚少。我从Java移植了代码,基本上采用了他们在原始代码中所做的逐行操作。