8

今日、WinRT で単純な一方向の SHA-256 ハッシュを作成しようとしましたが、うまくいかないことに気付きました。私は検証を行い、明らかにこれを得ました:

◦ API System.Security.Cryptography.SHA256Managed in MSCORLIB, PUBLICKEYTOKEN=B77A5C561934E089 は、このアプリケーション タイプではサポートされていません。CryptoWinRT.exe は、この API を呼び出します。◦ MSCORLIB、PUBLICKEYTOKEN=B77A5C561934E089 の API System.Security.Cryptography.HashAlgorithm は、このアプリケーション タイプではサポートされていません。CryptoWinRT.exe は、この API を呼び出します。◦ MSCORLIB の API System.Security.Cryptography.SHA256Managed.#ctor、PUBLICKEYTOKEN=B77A5C561934E089 は、このアプリケーション タイプではサポートされていません。CryptoWinRT.exe は、この API を呼び出します。◦ MSCORLIB の API System.Security.Cryptography.HashAlgorithm.ComputeHash(System.Byte[])、PUBLICKEYTOKEN=B77A5C561934E089 は、このアプリケーション タイプではサポートされていません。CryptoWinRT.exe は、この API を呼び出します。

これに代わるものは何ですか?WinRT では、なぜこのような些細なことが許可されないのでしょうか?

4

1 に答える 1

19

これはうまくいきますか?

    private void HandleHashClick(object sender, RoutedEventArgs e)
    {
        // get the text...
        var inputText = this.textInput.Text;

        // put the string in a buffer, UTF-8 encoded...
        IBuffer input = CryptographicBuffer.ConvertStringToBinary(inputText, 
            BinaryStringEncoding.Utf8);

        // hash it...
        var hasher = HashAlgorithmProvider.OpenAlgorithm("SHA256");
        IBuffer hashed = hasher.HashData(input);

        // format it...
        this.textBase64.Text = CryptographicBuffer.EncodeToBase64String(hashed);
        this.textHex.Text = CryptographicBuffer.EncodeToHexString(hashed);
    }
于 2012-10-19T19:36:43.420 に答える