2015-03-03 2 views
0

Я использую следующий код в C# для преобразования HMAC:C# Android HMAC результат

string RawData = "data"; 
    string sharedKey = "my-key"; 
byte[] signature = Encoding.UTF8.GetBytes(RawData); 
var KeyByteArray = Encoding.UTF8.GetBytes(sharedKey); 


      using (HMACSHA256 hmac = new HMACSHA256(KeyByteArray)) 
      { 
       byte[] signatureBytes =hmac.ComputeHash(signature); 

     var ContentBase64String =(Convert.ToBase64String(signatureBytes)); 

       Console.WriteLine(ContentBase64String); 
       Console.ReadKey(); 
      } 

И следующее Java:

String RawData="data"; 
String Key="my-key"; 
byte[] KeyByteArray=Key.getBytes("UTF-8"); 

byte[] signature=RawData.getBytes("UTF-8"); 


Mac sha256_HMAC; 
sha256_HMAC = Mac.getInstance("HmacSHA256"); 

SecretKeySpec secret_key = new SecretKeySpec(KeyByteArray, "HmacSHA256"); 
    sha256_HMAC.init(secret_key); 
String ContentBase64String = Base64.encodeToString(sha256_HMAC.doFinal(signature),Base64.URL_SAFE|Base64.NO_WRAP); 

Выход на C# выглядит следующим образом: C# output
Выход для андроида выглядит следующим образом: Android Output

Я занимаюсь этим много дней и не могу понять, что я делаю неправильно, поскольку результаты отличаются друг от друга, хотя они должны быть одинаковыми. Кроме того, когда я удаляю - в ключе результаты одинаковы. Я знаю, что, возможно, я пропустил что-то простое, но подумал, что другая пара глаз увидит мою ошибку. Благодарю.

+0

Существует незначительная разница. «-» в android отображается как «+» в C#. Посмотрите в конец. Я упомянул об этом во второй последней строке вопроса –

+0

Кроме того, если a/присутствует в одном, то оно отображается как _ в другом. Остальные совпадения –

ответ

0

Эти ответы одинаковы (поскольку байты, содержащиеся в HMAC, идут). Для разницы в выводах + и - вы можете указать , указав, указав the Base64.URL_SAFE flag.

Для будущих читателей данного вопроса: при возникновении сомнений ознакомьтесь с документацией на все, что вы не совсем понимаете.

+0

Спасибо. Ты прав. –

Смежные вопросы