SHA1在Xamarin Forms PCL中使用HMAC键入Hash [C#相当于PHP中的hash_hmac]

时间:2016-04-18 17:26:55

标签: c# xamarin xamarin.forms sha1 portable-class-library

我尝试使用HMAC方法为数据消息输入和密钥生成密钥哈希值。 C#中以下PHP代码的等价物是什么?

PHP

#!/usr/bin/php
<?php
$data = "WhatIsYourNumber";
$secretKey = "AliceAndBob";
echo hash_hmac('sha1', $data, $secretKey);
?>

结果:

e96af95f120df7b564b3dfecc0e74a870755ad9d

我想在Xamarin Forms可移植类库(PCL)中使用它。

1 个答案:

答案 0 :(得分:2)

首先,我找到了使用System.Security.Cryptography的解决方案;但我忘记了解决方案:

正如@Giorgi所说,将PCLCrypto NuGet包安装到您的PCL项目和客户项目中。

使用此代码:

using System.Text;
using PCLCrypto;

public static string hash_hmacSha1(string data, string key) {
    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
    byte[] dataBytes = Encoding.UTF8.GetBytes(data);
    var algorithm = WinRTCrypto.MacAlgorithmProvider.OpenAlgorithm(MacAlgorithm.HmacSha1);
    CryptographicHash hasher = algorithm.CreateHash(keyBytes);
    hasher.Append(dataBytes);
    byte[] mac = hasher.GetValueAndReset();

    StringBuilder sBuilder = new StringBuilder();
    for (int i = 0; i < mac.Length; i++) {
        sBuilder.Append(mac[i].ToString("X2"));
    }
    return sBuilder.ToString().ToLower();
}

string data = "WhatIsYourNumber";
string secretKey = "AliceAndBob";
System.Diagnostics.Debug.WriteLine("{0}", Utils.hash_hmacSha1(data, secretKey));

结果:

e96af95f120df7b564b3dfecc0e74a870755ad9d

资料来源: https://github.com/AArnott/PCLCrypto/wiki/Crypto-Recipes