JS は初めてですが、暗号ライブラリの使用方法も学んでいます。同じシークレットを使用して同じメッセージに署名/エンコードすると、異なる結果が生じる理由がわかりません。
ここにあるjsSHA 1.3.1 と、ここにあるCryptoJS 3.0.2を使用して、base64 sha-1 でエンコードされた hmac 署名を作成しようとしています。コードは次のとおりです。
htmlで...
<script src="lib/jsSHA/src/sha1.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha1.js"></script>
そしてjsで...
var message = "shah me";
var secret = "hide me";
var crypto = CryptoJS.HmacSHA1(message, secret).toString(CryptoJS.enc.Base64) + '=';
var shaObj = new jsSHA(message, "ASCII");
var jssha = shaObj.getHMAC(secret, "ASCII", "B64") + '=';
return "crypto answer is " + crypto + " jssha answer is " + jssha;
これらの結果が異なる理由を説明できますか?
crypto の回答は 3e929e69920fb7d423f816bfcd6654484f1f6d56= です jssha の回答は PpKeaZIPt9Qj+Ba/zWZUSE8fbVY= です
さらに、これらは両方とも、私がレールで生成している署名とは異なります。次のように...
digest = OpenSSL::Digest::Digest.new('sha1')
raw_signature = OpenSSL::HMAC.digest(digest, "hide me","shah me")
b64_signature = Base64.encode64(raw_signature).strip
(フィドルを提供したかったのですが、これは非常に一般的な慣行のようですが、それも私にとっては初めてで、この質問に対して機能するフィドルを取得できませんでした)。
前もって感謝します。