7

私は現在、データベースの行に基づいて入場するためのクレジットカードのスワイプを含むプロジェクトに取り組んでいます。ウィルコールシステムと同様に、CC番号のSHA-256ハッシュは、「適切なピックアップ」と見なされるために、DB行のハッシュと一致する必要があります。

ただし、興行収入はブラウザに基づいているため、ピックアップのCC番号は、Javascriptを使用してクライアント側でハッシュし、以前にダウンロードした通話データと比較する必要があります。

ただし、数値をハッシュしようとすると、ハッシュは常にDB行が作成されたときにハッシュされたものとは異なる結果になります(VB.NETおよびSQL Server 2008 R2を使用)。たとえば、データベースのCC番号がたまたま4444333322211111だった場合、.NETからの結果のハッシュはxU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pzTowExenM=になります。

ただし、私が見つけたJavascript用のSHA-256ハッシュライブラリを使用すると、結果のハッシュは常にNbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0=になります。

これはある種のUnicode/UTF-8の問題だと思いますが、何を試してもハッシュを同じように出すことができず、夢中になり始めています。誰かアドバイスはありますか?

ここにいくつかの洞察を提供するかもしれない何かがあります。http://www.insidepro.com/hashes.php?lang=engにアクセスし、「パスワード」ボックスに引用符なしで「4444333322221111」を挿入してください。その後、SHA-256セクションまでスクロールダウンします。

結果は4つあり、そのうち2つは私が投稿したハッシュコードです(上から2番目はJavascriptハッシュ、下から2番目はSQLハッシュです)。そのページによると、一番下のハッシュ結果は、base 64文字列を使用して生成され、パスワードをUnicode形式にします。

私はこれを調査し、パスワードをUnicode形式にエンコードするためにさまざまな関数を試しましたが、少し調整したり、他の関数を作成したりしても、必要なハッシュコードに一致させることはできませんでした。

現在、サーバー側でSHA-256関数を呼び出すときに使用されるパラメーターを調査しています。

アップデート:

そのため、気が狂っていないことを確認するために、デバッグ中にイミディエイトウィンドウのCC番号に使用しているハッシュメソッドを実行しました。この場合も、結果は以前と同じままです。ここでスクリーンショットを見ることができます:http://i.imgur.com/raEyX.png

4

3 に答える 3

2

オンラインのSHA-256ハッシュ計算機base-64からhexへのデコーダーによると、ハッシュを正しく計算していないのは.NETの実装です。ハッシュ関数に渡すパラメーターを再確認することをお勧めします。

信頼できない2つの実装を扱っている場合は、別の独立した実装を見つけて、3番目の実装と一致するものを正しいものとして選択することをお勧めします。それか、いくつかのテストベクトルを見つけて、実装を個別に検証します。


編集:

簡単な実験では、.NETから取得したSHA-256ハッシュがhext文字列3400340034003400330033003300330032003200320032003100310031003100(リトルエンディアンの16ビット文字)と一致することが示されています。必ずASCIIで渡してください。

于 2012-05-11T22:08:30.477 に答える
2

Adam Lissは、.NET /SQLServerの文字列間のバイト配列がJavascriptの文字列とは異なると述べたときにそれを正しく理解していました。文字列44443333222111の.NETの配列は、 [52 0 52 0 52 0 52 0 51 0 51 0 ...など]のようになり、Javascriptの同じものは[52 52 52 52 51 515151のようになります。 ...]。したがって、異なるバイト配列では、異なるハッシュが生成されました。

ここからベース64のSHA-256ハッシュアルゴリズムを変更することで、アプリケーションでこれを修正することができました。ハッシュを生成するために、各文字が文字列から一度に1つずつプルされます。

このようにするのではなく、最初に文字列をユニコードのようなバイト配列(上記の.NETの例、52 0 52 0など)に変換し、その配列を文字列ではなくハッシュアルゴリズムにフィードしました。ハッシュを生成するために各配列メンバーを取得するためのいくつかの非常に小さな調整。低くて見よ、それはうまくいきました、そして今私は迅速で簡単な順序検索のために.NETフレームワークと同じ方法でCC番号をハッシュする非常に便利な方法を持っています。

于 2012-05-14T16:44:24.973 に答える
0

JavaScript SHA256関数についてよろしいですか?


そして、最初に生成されたハッシュ?

SHA-256("4444333322221111"); // 35b8ee49a804ee51d5433292646d3de9b1ed42830bb1c6005f2b825d7d16b70d

hex: 35b8ee49a804ee51d5433292646d3de9b1ed42830bb1c6005f2b825d7d16b70d
HEX: 35B8EE49A804EE51D5433292646D3DE9B1ED42830BB1C6005F2B825D7D16B70D
h:e:x: 35:b8:ee:49:a8:04:ee:51:d5:43:32:92:64:6d:3d:e9:b1:ed:42:83:0b:b1:c6:00:5f:2b:82:5d:7d:16:b7:0d
base64: NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0=
于 2012-05-11T22:02:53.037 に答える