2010-03-17 13 views
5

Ich führe einige Tests im Vergleich der sha1 Algorithmus in Javascript implementiert - von http://pajhome.org.uk/crypt/ - mit seiner Implementierung in C#.SHA1 base64 Algorithmus in Javascript und C#

Verwendung von C#, um den Hash für { 'Methode': 'people.get'} zu bekommen verwende ich diese Aussage:

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

die mich Qy95a0ShZqhbNdt6IF8qNf72jX0=

In Javascript gibt erhalte ich fast die gleich: Qy95a0ShZqhbNdt6IF8qNf72jX0 die Anweisung mit:

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

im JavaScript-Fall wird der Hash nicht mit einem Gleichzeichen (=) enden.

Kann dieser Unterschied Probleme bei der Authentifizierung gegenüber einem Server verursachen?

In meinem Fall, wie viele von Ihnen vielleicht wissen, geht der Satz, den ich den Hash berechnen, in den HTTP-Body und der Server wird es überprüfen.

Dank

Antwort

5

Würde auf den Empfänger ab, sondern von der Javascript mit C# Decodierung Ihr Ergebnis versuchen, und Sie werden eine Exception. Das Zeichen = gibt das Ergebnis auf die richtige Länge auf.

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

+0

Ok, basierend auf dieser Information sah ich jetzt, dass das = Zeichen, wie Sie darauf hingewiesen, wird zum Auffüllen der Nachricht verwendet. Danke – Andres

+3

@Andres: Sie können Zeile 15 der 'sha1.js' Datei von pajhome.org.uk aktualisieren, um' = 'als Füllzeichen zu verwenden. – LukeH

+0

Ja, während ich meine eigene Antwort geschrieben habe, hast du diese Bemerkung geschrieben. Danke :) – Andres

4

Die sha1.js aus dem lib ich in meiner Frage erwähnt, hat eine globale Variable namens b64pad, zum Zweck der Polsterung verwendet. Standardmäßig ist der Wert "". Ändern auf "=" gibt den genauen Hash berechnet von C# API