2016-04-18 11 views
0

Я пытаюсь сгенерировать значение хеша с ключом, используя метод HMAC для ввода данных и секретный ключ. Что такое эквивалент для следующего кода PHP на C#?SHA1 keyed Hash с HMAC в Xamarin Forms PCL [C# эквивалентно hash_hmac в PHP]

PHP

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

Результат:

e96af95f120df7b564b3dfecc0e74a870755ad9d 

Я хотел бы использовать его в Xamarin форм Портативный библиотеки классов (PCL).

+0

Надувной замок PCL также работает очень хорошо: http://www.c-sharpcorner.com/UploadFile/4088a7/using- криптография-в-портативного-Xamarin-formswindows-телефон / – SushiHangover

ответ

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