パラメータと値のペアをバイト順に並べ替え

広告

パラメータとURLエンコードされた値のペアを並べ替えます。まずはパラメータと値をイコール(=)で結んだ文字列を作成します。前のページのスクリプトを次のように変更します。

var para = {
  "Service":"AWSECommerceService",
  "AWSAccessKeyId":"00000000000000000000",
  "Operation":"ItemLookup",
  "ItemId":"0679722769",
  "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
  "Version":"2009-01-06",
  "Timestamp":"2009-01-01T12:00:00Z"
};

var para_array = [];

for(var pname in para){
  para_array.push(pname + "=" + encodeURIComponent(para[pname]));
}

パラメータとエンコードされた値がつながった文字列を作成し、配列の値として格納したものを作成しました。

続いてArray.sort()メソッドを使って配列の要素をソートします。JavaScriptのsortメソッドでソートするとアルファベットの大文字が小文字の前に並びますのでそのまま利用できます。

var para = {
  "Service":"AWSECommerceService",
  "AWSAccessKeyId":"00000000000000000000",
  "Operation":"ItemLookup",
  "ItemId":"0679722769",
  "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
  "Version":"2009-01-06",
  "Timestamp":"2009-01-01T12:00:00Z"
};

var para_array = [];

for(var pname in para){
  para_array.push(pname + "=" + encodeURIComponent(para[pname]));
}

para_array.sort();

これでパラメータの並べ替えが完了しました。

サンプル

では簡単なサンプルで試してみます。

sample3_1.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>署名認証テスト</title>
<script type="text/javascript" src="./js/script3_1.js"></script>
</head>
<body>

<p>
ボタンを押して下さい
</p>

<p>
<input type="button" name="checkbutton" value="check" onclick="getSignature()" />
</p>

<div id="output" style="width: 500px; height: 100px"></div>

</body>
</html>

script3_1.js

function getSignature(){
  var para = {
    "Service":"AWSECommerceService",
    "AWSAccessKeyId":"00000000000000000000",
    "Operation":"ItemLookup",
    "ItemId":"0679722769",
    "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
    "Version":"2009-01-06",
    "Timestamp":"2009-01-01T12:00:00Z"
  };

  var para_array = [];

  for(var pname in para){
    para_array.push(pname + "=" + encodeURIComponent(para[pname]));
  }

  var html = "";

  html += "<p>";
  for (var i = 0 ; i < para_array.length ; i++){
    html += para_array[i] + "<br />";
  }
  html += "</p>";

  para_array.sort();

  html += "</p>ソート後</p>";

  html += "<p>";
  for (var i = 0 ; i < para_array.length ; i++){
    html += para_array[i] + "<br />";
  }
  html += "</p>";

  document.getElementById('output').innerHTML = html;
}

上記を実際にブラウザ見てみると次のように表示されます。

パラメータと値のペアをバイト順に並べ替え

ボタンを押すと次のように表示されます。

パラメータと値のペアをバイト順に並べ替え

( Written by Tatsuo Ikura )