SHA-256-hashes der Unterschied zwischen C# und Javascript

Ich arbeite derzeit an einem Projekt, die Kreditkarte klaut für die Zulassung basiert auf der Datenbank-Zeilen. Wie wird ein call-system, die SHA-256-hash der CC-Nummer muss mit dem hash in der DB Zeile, um als die "richtigen " pickup".

Jedoch, da die box-office-system basiert im browser, die CC-Nummer auf pickup muss zerlegt werden client-seitig mit Javascript, und dann im Vergleich zu den zuvor heruntergeladenen Daten nennen.

Jedoch, wenn Sie versuchen, um hash-zahlen, ist der hash immer endet anders als das, was war, wenn die Hash-DB-Zeile wurde erstellt (mit VB.NET und SQL Server 2008 R2). Zum Beispiel, wenn Sie eine CC-Nummer in der Datenbank passiert sein 4444333322221111, dann der resultierende hash aus .NETTO würde xU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pztowexenm=.

Jedoch, bei der Benutzung eines SHA-256 hash-Bibliothek für Javascript, die ich finden konnte, ist der resultierende hash-immer NbjuSagE7lHVQzKSZG096bHtQoMLscYAxyucxx0wtw0=.

Ich gehe davon aus, dass diese Art von Unicode/UTF-8 Problem, aber egal was ich versuche ich Schaffe es nicht, die hashes zu kommen die gleichen und es fängt an, mich verrückt. Kann mir jemand einen Rat?

Hier ist etwas, das kann einen Einblick. Bitte gehen Sie auf http://www.insidepro.com/hashes.php?lang=eng und einfügen "4444333322221111" ohne Anführungszeichen in das Feld Kennwort ein. Danach scrollen Sie nach unten, um den SHA-256 Abschnitt.

Können Sie sehen, es sind vier Ergebnisse, zwei von Ihnen sind die hash-codes, die ich gepostet (das zweite von oben, die die Javascript-hash und der untere ist der SQL-hash). Laut dieser Seite, die unten hash-Ergebnis wird erzeugt, unter Verwendung einer base-64-Zeichenfolge, als auch das Passwort in unicode-format.

Habe ich das untersucht und versucht, viele verschiedene Funktionen zu codieren, das Passwort in unicode-format, aber egal, welche kleinen Kniffe, die ich ausprobieren oder andere Funktionen, die ich machen, was ich nie bekommen konnte, das mit dem hash-code, den ich brauche.

Ich bin derzeit auf der Untersuchung der Parameter, die beim Aufruf des SHA-256-Funktion auf der server-Seite.

UPDATE:

So, nur um sicherzustellen, dass ich war nicht verrückt, ich lief die Hash-Methode ich bin für den CC-Nummern in das Direktfenster beim Debuggen. Wieder, das Ergebnis bleibt das gleiche wie zuvor. Sehen Sie ein screenshot hier: http://i.imgur.com/raEyX.png

  • Könnte Sie bieten einige Informationen, wie Sie erreicht den hash an beiden enden? Was funktioniert, ist dein code, etc ...
  • mögliche Duplikate von Java-SHA256 Ausgänge verschiedene hash, PHP SHA256?
  • Zeigen einige code? Ich bin mit diesem SHA512: pajhome.org.uk/crypt/md5/sha512.html und ich zuvor verwendet dieser SHA-1: movable-type.co.uk/scripts/sha1.html ohne C# interop-Probleme. (Frage: warum nicht sha512?)
  • Ich glaube nicht, dass dies ein Duplikat ist, zumindest nicht in der Frage, die Sie verlinkt wird. Javascript vs. C#. Das ist PHP vs. Java. Es konnte nicht mehr anders, da es sich fast sicher um eine Auslastung Problem, und die Nutzung könnte durchaus über diese Plattformen.
  • Das richtige Ergebnis scheint zu sein, dass der javascript-Funktion, so muss das problem in der c# - code
  • Unabhängig von der spezifischen Sprache, kann das problem einer Codierung: do javascript und C# die Darstellung der Zeichen als identisch byte-streams? Wenn nicht, würde das Konto für die unterschiedliche hashes.
  • So it es ein encoding problem. Um dies noch deutlicher: der base-64-codiert digest der ascii/utf-8/latin1-string "4444333322221111" ist NbjuSagE7lHVQzKSZG096bHtQoMLscYAxyucxx0wtw0=. Denke, es kann einfacher sein, zu konvertieren, die cc-Nummer zu ascii auf den server als auf konvertieren Sie die Zeichenfolge in unicode (utf-16?)
  • utf-8/ascii/latin-1 haben den gleichen 16 bytes für die cc-Zahl, aber die unicode - (utf-16?) string ist 32 bytes (2 bytes pro Zeichen), damit die verdaut sind unterschiedlich.

Schreibe einen Kommentar