I'm running some tests comparing the sha1 algorithm implemented in javascript - got from http://pajhome.org.uk/crypt/ - with its implementation in C#.
Using C# to get the hash for {'method':'people.get'} I'm using this statement:
Convert.ToBase64String(new System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes("{'method':'people.get'}")));
which gives me Qy95a0ShZqhbNdt6IF8qNf72jX0=
In javascript I get almost the same: Qy95a0ShZqhbNdt6IF8qNf72jX0
using the statement:
b64_sha1("{'method':'people.get'}");
In the javascript case, the hash doesn't end with a equal (=) sign.
Can this difference cause me troubles in authenticating against a server?
In my case, as many of you may know, the sentence I'm reckoning the hash goes inside the http body and the server will check it.
Thanks
Would depend on the receiver but try decoding your result from the javascript with C# and you'll get an exception. The = sign is there to pad the result to the correct length.
http://en.wikipedia.org/wiki/Base64
The sha1.js
from the lib I mentioned in my question, has a global variable called b64pad
, used for the purpose of padding. By default its value is ""
. Changing to "="
gives the exact hash reckoned by C# API
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With