Проблема с кодировкой .Net HMAC и base64

Я пытаюсь создать хэш HMAC SHA512 в кодировке base64, используя секрет secret и полезную нагрузку foo. Я не могу заставить свой код .NET выдавать правильное значение. Мне интересно, является ли кодировка основной проблемой.

Код:

UTF8Encoding encoding = new UTF8Encoding();
HMACSHA512 hmac = new HMACSHA512(encoding.GetBytes("secret")); // init the HMAC hash with "secret" as a byte array
byte[] hash = hmac.ComputeHash(encoding.GetBytes("foo")); // hash the payload
String result = Convert.ToBase64String(hash); // Base64 encode the payload

Неправильный результат хэша и base64:

gt9xA96Ngt5F4BxF/mQrXRPGwrR97K/rwAlDHGZcb6Xz0a9Ol46hvekUJmIgc+vqxho0Ye/UZ+CXHHiLyOvbvg==

Ожидаемый результат hash & base64:

ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=


person mark    schedule 25.03.2016    source источник
comment
Если вы не получаете ожидаемого результата, значит, вы получаете его откуда-то еще. Где это видят?   -  person dana    schedule 25.03.2016
comment
@dana У меня есть программа node.js и программа php, создающая правильный хэш.   -  person mark    schedule 25.03.2016


Ответы (1)


Поскольку вторая версия представляет собой просто представление Base64 в шестнадцатеричном формате, вам необходимо сначала преобразовать массив байтов в шестнадцатеричный, а затем в версию строки Base64 ASCII.

Шаги:

person Alexei Levenkov    schedule 25.03.2016
comment
Это было. Я видел вопросы, на которые вы ссылались, но это не имело смысла, пока вы не сказали, что мне нужно сначала преобразовать байт [] в шестнадцатеричный. Спасибо. - person mark; 25.03.2016