Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Win10通用应用程序中的sha256.TransformBlock_C#_.net_Win Universal App_Sha256 - Fatal编程技术网

C# Win10通用应用程序中的sha256.TransformBlock

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

我在.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....}
我正试图在一个通用的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移植了代码,基本上采用了他们在原始代码中所做的逐行操作。