2009-05-08 2 views
0

Мне нужно создать хэшированный ключ для строки XML для отправки третьей стороне. Это код, который я использую, но он создает другой хеш, чем пример, который отправил мне третий участник. Я прошел через все обучающие программы, которые я могу найти и перечитывать MSDN снова и снова. Что я делаю не так? Или я должен подозревать проблему на другом конце?Правильный способ шифрования строки с использованием HmacSHA256 в VB.NET

Public Shared Function HashString(ByVal StringToHash As String) As String 
    Dim myEncoder As New System.Text.UTF32Encoding 
    Dim Key() As Byte = myEncoder.GetBytes(My.Settings.PortalHASH) 
    Dim XML() As Byte = myEncoder.GetBytes(StringToHash) 
    Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key) 
    Dim HashCode As Byte() = myHMACSHA256.ComputeHash(XML) 
    Return Convert.ToBase64String(HashCode) 
End Function 

Он должен быть закодирован в base-64, поэтому у меня есть последняя строка.

Благодаря

+0

кажется правильным для меня. Вопрос в том, используете ли вы один и тот же ключ для хэша. My.Settings.PortalHASH предполагает, что это не хэш не ключ. Но вы могли бы выбрать вводящее в заблуждение имя, и на самом деле это ключ. Таким образом, мой вопрос в самом деле: как вы получаете ключ? –

+0

Ключ - это Хэш, отправленный нам третьей стороной. Это тот же формат, что и строка, возвращаемая этой функцией, поэтому я подумал, что правильно, чтобы ее байты таким образом передавали их в качестве ключа. –

+0

Если третье лицо отправляет вам хэш ключа, который они используют, вы можете теперь получить ожидаемый результат. Вам нужно убедиться, что вы получаете тот же ключ, что и сторонний участник. –

ответ

1

(Прочитайте мои комментарии)
Если My.Settings.PortalHASH является закодированный ключ Base64 вам нужно сделать, это:

Dim Key() As Byte = Convert.FromBase64String(My.Settings.PortalHASH) 
+0

Привет, CKret, который имеет большой смысл - я пробовал линию выше, и она все еще не соответствует, но я не могу поверить сторонняя сторона отправляет мне ключ хэширования - я, тем не менее, буду обращаться к ним по телефону и дважды проверить все подробности, спасибо. –

+0

Привет, CKret, а также ответ выше Я использовал неправильный объект кодирования, я хотел ASCII не UTF32, по-видимому, было бы хорошо, если бы они сказали мне! Твой ответ был ближе всего, - привет. –

+0

Отличная новость, что вы ее исправили! Я должен был подобрать возможную проблему кодирования, но, увы, нет. Ну ... хорошо, что ты это решил. –

0

Я не могу комментировать правильность VB, но от очевидности наименования, я могу сказать, что это выглядит правильно.

Так что информации здесь недостаточно, чтобы сказать, что случилось; и вы, вероятно, сказали все, что знаете. Поэтому люди, чтобы проверить это для вас, будут вашей третьей стороной. Они смогут сказать, что случилось.

PS: Странно, что нет другого сообщения, отправленного другой стороной в качестве вызова?

+0

Другой конец просто ударяет по серверной ошибке :) В настоящий момент наша сторона находится на очень ранних стадиях разработки, поэтому я не могу определить, что не так, как могло бы быть что угодно! Если вышеупомянутое действительно выглядит правильно, возможно, у меня есть ключ от них или какой-то такой, приветствия для вашего ввода –

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