Xamarin Forms PCL 中带有 HMAC 的 SHA1 键控哈希 [C# 等同于 PHP 中的 hash_hmac]

SHA1 keyed Hash with HMAC in Xamarin Forms PCL [C# equivalent to hash_hmac in PHP]

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

PHP

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

结果:

e96af95f120df7b564b3dfecc0e74a870755ad9d

我想在 Xamarin Forms Portable Class 库 (PCL) 中使用它。

首先我找到了使用 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