2

インクリメンタル 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 の方法で) 実装する代替手段はありますか? 明らかな何かが欠けている可能性は十分にあります...

4

1 に答える 1

4

CryptographicHashクラスを使用する必要があります。

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

データの複数の増分を追加できます。

hasher.Append(bytesPart.AsBuffer());

完了したら、ハッシュを取得します。

var hash = hasher.GetValueAndReset().ToArray();
于 2012-12-21T06:09:38.800 に答える