我尝试使用HMAC方法为数据消息输入和密钥生成密钥哈希值。 C#中以下PHP代码的等价物是什么?
PHP
#!/usr/bin/php
<?php
$data = "WhatIsYourNumber";
$secretKey = "AliceAndBob";
echo hash_hmac('sha1', $data, $secretKey);
?>
结果:
e96af95f120df7b564b3dfecc0e74a870755ad9d
我想在Xamarin Forms可移植类库(PCL)中使用它。
答案 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