はじめに

ストアアプリを開発していて、ハッシュを使いたくなりました。
さっそく、「System.Security.Cryptography」で、「MD5CryptoServiceProvider」
なんて思ったのですが、それでは上手くいかないのです。

さっそくプログラム紹介


まず、usingを宣言しておいてください。
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;

文字列から、ハッシュ値の文字列を取得するメソッドを書いてみました。
private static string GetHashString(string targetString)
{
    var hashAlgorithmProvider = 
        HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
    var buffUtf8Target = 
        CryptographicBuffer.ConvertStringToBinary(targetString,
                                                  BinaryStringEncoding.Utf8);
    var hashData = hashAlgorithmProvider.HashData(buffUtf8Target);
#if DEBUG
    if (hashData.Length != hashAlgorithmProvider.HashLength)
    {
        throw new Exception("There was an error creating the hash");
    }
#endif
    var hashBase64String = CryptographicBuffer.EncodeToBase64String(hashData);

    return hashBase64String;
}

まず、「HashAlgorithmProvider」で、利用するハッシュを選択します。
以下の値を指定することが出来ます。

・HashAlgorithmNames.Md5
・HashAlgorithmNames.Sha1
・HashAlgorithmNames.Sha256
・HashAlgorithmNames.Sha384
・HashAlgorithmNames.Sha512

次の行(CryptographicBuffer.ConvertStringToBinary)は、「HashAlgorithmProvider」で、ハッシュ値を求めるときに、IBuffer を要求するので、その形にコンバートするメソッ

ドです。第一引数に、文字列を設定し、第二引数にエンコーディングの値を指定します。

「hashAlgorithmProvider.HashData」で、ハッシュ値を求めます。引数も戻り値もIBufferです。
「CryptographicBuffer.EncodeToBase64String」にて、ハッシュ値をBase64Stringにして取り出しています。

おわりに

改ざん検出に大きな役割を果たすハッシュ値の求め方でした。
ローカルPCに値を保存する時に使っていただけたらと思います。

調査環境

Windows ストア アプリ
VS2012
C#

更新日

2013/06/30:アップ