Алгоритм SHA1 base64 в JavaScript и C # - PullRequest
5 голосов
/ 17 марта 2010

Я запускаю несколько тестов, сравнивающих алгоритм sha1, реализованный в javascript - полученный из http://pajhome.org.uk/crypt/ - с его реализацией в C #.

Использование C # для получения хэша для {'method': 'people.get'} Я использую это утверждение:

Convert.ToBase64String(new System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes("{'method':'people.get'}")));

что дает мне Qy95a0ShZqhbNdt6IF8qNf72jX0=

В JavaScript я получаю почти то же самое: Qy95a0ShZqhbNdt6IF8qNf72jX0, используя выражение:

b64_sha1("{'method':'people.get'}");

В случае JavaScript, хеш не заканчивается знаком равенства (=).

Может ли это различие вызвать у меня проблемы с аутентификацией на сервере?

В моем случае, как многие из вас могут знать, предложение, которое я считаю хэшем, идет внутри тела http, и сервер проверит его.

Спасибо

Ответы [ 2 ]

5 голосов
/ 17 марта 2010

Зависит от получателя, но попробуйте расшифровать ваш результат из JavaScript с помощью C #, и вы получите исключение. Знак = используется для дополнения результата до правильной длины.

http://en.wikipedia.org/wiki/Base64

4 голосов
/ 17 марта 2010

В sha1.js из библиотеки, о которой я говорил в моем вопросе, есть глобальная переменная b64pad, используемая для заполнения. По умолчанию его значение равно "". Изменение на "=" дает точный хэш, который считается C # API

...