WinRT / Metro中的增量哈希

时间:2012-12-21 00:16:51

标签: c# hash cryptography windows-runtime

我正在移植一些使用增量SHA-1的代码:

SHA1 hasher = HashAlgoFactory.Create<SHA1>();
hasher.Initialize();

DiskIOCallback readCallback = null; 
readCallback = delegate(bool successful) {

if (successful)
    hasher.TransformBlock(hashBuffer, 0, count, hashBuffer, 0);
    offset += count;

if (!successful || offset == endOffset)
{
    object hash = null;
    if (successful)
    {
        hasher.TransformFinalBlock(hashBuffer, 0, 0);
        hash = hasher.Hash;
    }

我正在寻找WinRT / Metro等效产品。我之前使用过hasher.HashData;是否有一些相对简单的方法可以从HashData中获取增量行为,或者是一些实现上述相同功能的替代方法(以WinRT / Metro方式)?我完全有可能错过一些明显的东西......

1 个答案:

答案 0 :(得分:4)

您应该使用CryptographicHash class:

var hashProvider = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1);
var hasher = hashProvider.CreateHash();

您可以附加多个数据增量:

hasher.Append(bytesPart.AsBuffer());

完成后,您将检索哈希:

var hash = hasher.GetValueAndReset().ToArray();