首页 文章

sha256.TransformBlock在Win10 Universal App中

提问于
浏览
1

我在.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....}

而我'm trying to replicate it in an universal Windows 10 App. However I cannot find TransformBlock / TransformFinalBlock functions on the SHA256-object in the new .NET libraries. I' ve已经添加了对版本4.0.0-beta-23409 of System.Security.Cryptography.Algorithms的依赖 . 而我得到的错误是:

错误CS1061:'SHA256'不包含'TransformBlock'的定义,并且没有可以找到接受类型'SHA256'的第一个参数的扩展方法'TransformBlock'(您是否缺少using指令或汇编引用?)错误CS1061 :'SHA256'不包含'TransformFinalBlock'的定义,并且没有扩展方法'TransformFinalBlock'接受类型'SHA256'的第一个参数(你是否缺少using指令或汇编引用?)错误CS1061:'SHA256 '不包含'Hash'的定义,并且没有扩展方法'Hash'可以找到接受类型'SHA256'的第一个参数(你是否缺少using指令或汇编引用?)

如何获得与.NET 4.5相同的结果?

1 回答

  • 0

    解决方案在另一个类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();
    }
    

相关问题