crypto
サーバー側で SHA256 ハッシュにNodeJS のバンドル モジュールを使用しています。クライアント側では、 という JavaScript ライブラリを使用していますCrypto-JS
。
従来の nonce ベースの認証を使用するログイン システムに SHA256 ハッシュを使用しています。ただし、ハッシュメッセージが同じであっても、サーバー側とクライアント側のハッシュダイジェストが一致しません(これを確認しました)。ハッシュ ダイジェストの長さも異なります。
これは、クライアント側の実装のスニペットです。
var password_hash = CryptoJS.SHA256( token.nonce /*this is the server's nonce*/ + cnonce + password ).toString(CryptoJS.enc.Base64);
これは、サーバー側の実装のスニペットです。
var sha256 = CRYPTO.createHash("sha256");
sha256.update(snonce+cnonce+password, "utf-8");
var hash = sha256.digest("base64");
これはいくつかのサンプルデータです:
client-digest: d30ab96e65d09543d7b97d7cad6b6cf65f852f5dd62c256595a7540c3597eec4
server-digest: vZaCi0mCDufqFUwVO40CtKIW7GS4h+XUhTUWxVhu0HQ=
client-message: O1xxQAi2Y7RVHCgXoX8+AmWlftjSfsrA/yFxMaGCi38ZPWbUZBhkVDc5eadCHszzbcOdgdEZ6be+AZBsWst+Zw==b3f23812448e7e8876e35a291d633861713321fe15b18c71f0d54abb899005c9princeofnigeria
server-message: O1xxQAi2Y7RVHCgXoX8+AmWlftjSfsrA/yFxMaGCi38ZPWbUZBhkVDc5eadCHszzbcOdgdEZ6be+AZBsWst+Zw==b3f23812448e7e8876e35a291d633861713321fe15b18c71f0d54abb899005c9princeofnigeria
ハッシュが異なる理由を知っている人はいますか? 同じプロトコル/アルゴリズムであれば、常に同じハッシュが生成されると思いました。
編集:うわー。このオンライン ハッシュ ツールにアクセスしたところ、同じメッセージに対してさらに別のダイジェストが生成されます。
4509a6d5028b217585adf41e7d49f0e7c1629c59c29ce98ef7fbb96c6f27502c
編集編集:考え直して、オンラインハッシュツールが異なる理由は、おそらくhex
エンコーディングを使用しているためです。base64