Использование этого ответвления PCL от BouncyCastle https://www.nuget.org/packages/BouncyCastle-PCL/1.0.0.6 действительно просто, фактически идентично окнам api.
public string ComputeHMAC(string message)
{
var keyBytes = Encoding.UTF8.GetBytes(Constants.API_KEY);
var messageBytes = Encoding.UTF8.GetBytes(message);
var hmac = new HMACSHA256(keyBytes);
byte[] result = hmac.ComputeHash(messageBytes);
return Convert.ToBase64String(result);
}
И модульное тестирование с использованием фактической версии .Net:
[Test, AutoMoqData]
public void Hash_Algorithm_Correct (
[NoAutoProperties] HashMacService sut,
string message)
{
string expected;
var key = Encoding.UTF8.GetBytes(Constants.API_KEY);
using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
expected = Convert.ToBase64String(hash);
}
var result = sut.ComputeHMAC(message);
Assert.That(result, Is.EqualTo(expected));
}
Я использовал PCLCrypto но терпел крах на Xamarin прошивке, это было гораздо чище, и может быть протестировано, требуется PCLCrypto Тогда как платформа apis должна была быть развернута на устройстве.
Возможный дубликат [C# PCL HMACSHAX с BouncyCastle-PCL] (http://stackoverflow.com/questions/30974846/c-sharp-pcl-hmacshax-with-bouncycastle-pcl) – Nkosi