Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SHA1 base64 algorithm in javascript and C#

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

like image 457
Andres Avatar asked Mar 17 '10 12:03

Andres


2 Answers

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

like image 138
Don Avatar answered Nov 17 '22 12:11

Don


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

like image 4
Andres Avatar answered Nov 17 '22 12:11

Andres