2

JavaScript でのエンコーディングで問題に直面しています。ここで期待した結果が得られません

ここにリストしたいことがいくつかあります-1)ルビーでエンコーディングを行っているときに、期待される結果が得られます。- 2) しかし、JavaScript で同じ手順を実行しようとすると、期待どおりの結果が得られません


1)正常に動作している ruby​​ のコードを以下に示します。

require 'openssl'
require "base64"
key =  Base64.decode64("yZQungXDXtksG4Ypcl0f6moRXWTCHh/CYDViXnZvbC0=")
data = "<content><app-id>9cd73144-46ca-4a02-852b-fa452b1d8bdc</app-id><hmac>HMACSHA256</hmac><signing-time>2013-11-19T12:06:11.409Z</signing-time></content>"
result  = OpenSSL::HMAC.digest('sha256', key , data)
final_result = Base64.encode64(result)

ruby 出力: 期待される出力を受け取りました

Key =  "\xC9\x94.\x9E\x05\xC3^\xD9,\e\x86)r]\x1F\xEAj\x11]d\xC2\x1E\x1F\xC2`5b^vol-"
result = "\xC4\x9B\x94\x9C\anQT\xF9';\xE9$\x1C\x98k\xEE)\xD77\xFD\xCA\a\xD1L\xBB\x9B\xD2r\xE9\x1A\xA8"
final_result = "xJuUnAduUVT5JzvpJByYa+4p1zf9ygfRTLub0nLpGqg=\n"

2)期待どおりに動作しない JavaScript のコードを以下で見つけてください。

  • エンコードとデコードにcrypo.jsを使用

<html>
  <head>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha256.js"></script>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>

    <script>
      key = window.atob("yZQungXDXtksG4Ypcl0f6moRXWTCHh/CYDViXnZvbC0=");
      data = "<content><app-id>9cd73144-46ca-4a02-852b-fa452b1d8bdc</app-id><hmac>HMACSHA256</hmac><signing-time>2013-11-19T12:06:11.409Z</signing-time></content>";
      console.log("key");
      console.log(key);
      result = CryptoJS.HmacSHA256(data, key);
      console.log("result");
      console.log(result.toString());
      final_result = CryptoJS.enc.Base64.stringify(result);
      console.log("final_result");
      console.log(final_result.toString());
    </script>
  </head>
  <body>
  </body>
</html>

Javascript 出力: 期待される出力を受け取りました

Key =  "É.Ã^Ù,)r]êj]dÂÂ`5b^vol-"
result = "035a028de6bea2c7843b4310b28b57f5193d7597840ea2f23c255cb889d77d60"
final_result = "A1oCjea+oseEO0MQsotX9Rk9dZeEDqLyPCVcuInXfWA="

だからここで私は理解していませんkey、なぜ私はresultfinal_resultruby and JavaScript

あなたの経験を共有してください、それは私に大いに役立ちます

ありがとう

4

2 に答える 2

0

私は多くのことを試しましたが、以下の解決策を見つけました。

<html>
  <head>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha256.js"></script>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>
    <script src="jquery.base64.js"></script>
    <script>
      var key = Base64.decode("yZQungXDXtksG4Ypcl0f6moRXWTCHh/CYDViXnZvbC0=");
      console.log(key)
      words = CryptoJS.enc.Latin1.parse(key);
      words = CryptoJS.enc.Hex.parse(words.toString());
     result = CryptoJS.HmacSHA256("<content><app-id>9cd73144-46ca-4a02-852b-fa452b1d8bdc</app-id><hmac>HMACSHA256</hmac><signing-time>2013-11-19T12:06:11.409Z</signing-time></content>", words);
     console.log(result);
     final_result = CryptoJS.enc.Base64.stringify(result);
     console.log(final_result);
   </script>
 </head>
</html>

今、私は期待される結果を得ています。

key = "É.Ã^Ù,)r]êj]dÂÂ`5b^vol-"
result = "c49b949c076e5154f9273be9241c986bee29d737fdca07d14cbb9bd272e91aa8"
final_result = "xJuUnAduUVT5JzvpJByYa+4p1zf9ygfRTLub0nLpGqg="
于 2013-12-16T13:41:05.770 に答える