1

所以在过去,我曾经使用 Windows 8 中不可用的 System.Security.Cryptography。我在 Windows 8 中发现的是 windows.security,但我没有找到任何关于如何使用 Sha256 和密钥的示例。这是我与 System.Security.Cryptography 一起使用的旧代码

        string appID = "appid";
        string key = "password";
        var hmacsha256 = new HMACSHA256(Encoding.Default.GetBytes(key));
        hmacsha256.ComputeHash(Encoding.Default.GetBytes(appID));
        string k = "";
        foreach (byte test in hmacsha256.Hash)
        {
            k += test.ToString("X2");
        }
4

4 回答 4

6

所以这是最终的工作代码

public static string ComputeSignature (string algorithmName, string content, string key, BinaryStringEncoding encoding = BinaryStringEncoding.Utf8)
{   
    var algorithmProvider = MacAlgorithmProvider.OpenAlgorithm(algorithmName);
    var contentBuffer = CryptographicBuffer.ConvertStringToBinary(content, encoding);
    var keyBuffer = CryptographicBuffer.ConvertStringToBinary(key, encoding);
    var signatureKey = algorithmProvider.CreateKey(keyBuffer);
    var signedBuffer = CryptographicEngine.Sign(signatureKey, contentBuffer);
    return CryptographicBuffer.EncodeToHexString(signedBuffer);
}
于 2013-02-16T21:58:55.723 回答
1

您可以使用其中的类Windows.Security.Cryptography来创建消息身份验证代码(问题中的键控哈希)。这是一个例子。请将其视为演示代码,按原样提供。对与安全相关的所有代码进行全面的安全审查。

var clear = "foobarbaz";
var bytes = CryptographicBuffer.ConvertStringToBinary(clear, BinaryStringEncoding.Utf8);
var macProvider = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256);
var rndKey = CryptographicBuffer.GenerateRandom(macProvider.MacLength);
var key = macProvider.CreateKey(rndKey);
var cypherMac = CryptographicEngine.Sign(key, bytes);
var asString = CryptographicBuffer.EncodeToBase64String(cypherMac);
于 2013-02-12T19:01:56.640 回答
1

根据 .NET Framework 文档,您使用的类在 .NET 4.5 中可用,并在 Windows 8 上受支持。
http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256.aspx

如果您在谈论 WinRT 运行时,这可能是您想要的: http ://channel9.msdn.com/Forums/TechOff/Porting-to-WinRT/4df7586e1ef5400682eda00f0143b610

于 2013-02-12T22:28:22.777 回答
-1

这对我有用:

using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;

string str = "your string";
string hash = CryptographicBuffer.EncodeToHexString(HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256).HashData(CryptographicBuffer.ConvertStringToBinary(str, BinaryStringEncoding.Utf8)));
于 2015-01-08T20:24:25.693 回答