Digest::SHAがインストールされていないレンタルサーバでSHA256を使用する奇妙な方法

 Amazon Web Service のAPI呼び出しの仕様変更は8/15までに行わないといけないことを知り、今頃になって仕方なく自作のアプリケーションに対して修正を始めました。
 それでAPIを呼び出すためには「SHA256アルゴリズムでクエリ文字列のハッシュをHMAC方式で計算し、base64に変換する」する必要があり、SHA256変換を行うためには perlでは Digest::SHA モジュールを使う必要があるとのことですが、自分が使っているレンタルサーバではインストールされていませんでした。なのでこの手は使えません。

 PHPであれば、標準でHMAC方式で計算を行える hash_hmac 関数が(5.1.2以降では)用意されていて、

	$data = hash_hmac("sha256", $query, $secretkey, true);
	$signature = base64_encode($data);

 と2行だけで処理できてしまいます。さすがPHPは何でもアリだよなあと感心していたのですが、ここで何故か「SHA256でハッシュを計算するところだけPHPで処理させればいいんじゃね?」という電波を受信してしまったのが運の尽き(何故か)。
 引数にクエリ文字列と秘密鍵を受け取り、上記の処理を行うだけのPHPプログラムをサーバ上に用意し、perlではそのプログラムをLWP::UserAgentで呼び出して結果を取得するという方法でやってみることにしました。

PHP – hmac.php


perl

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

sub hmac_sha256_base64
{
	my ($q, $secretkey) = @_;
	my %formdata = ('q' => $q, 's' => $secretkey);
	my $request  = POST('http://hmac.phpを置いたサーバ/hmac.php', [%formdata]);
    my $ua = LWP::UserAgent->new();
	my $res = $ua->request($request);
	return $res->content;
}

# $qに変換したいクエリ文字列、$secretkeyにあなたの秘密鍵を設定
my $signature = hmac_sha256_base64($q, $secretkey);

 なお、Digest::SHAがインストールされていないサーバでは、こちらで紹介されているように全てperlで書かれたDigest::SHA::PurePerlをサーバにアップロードして use lib でパスを通して使うのが正解の模様です(手遅れ)。

2009/07/24 のメモ

『亀田や「ROOKIES」の相手は、よくわからないゴーストだった。』
ROOKIESの映画の宣伝に対戦相手が全く出てこなかった理由がよく判りました。自己実現の手段としてしか野球を描いていないからだったのね

Powered by Livedoor Clip
カテゴリー: Memo

2009/07/23 のメモ

“俺はもう既に本物のヒョウなのかもしれない”とかうちの息子が言い出したらどうしようと思った

7/22の日食写真スライドショー。73枚ってのがすごい

Powered by Livedoor Clip
カテゴリー: Memo

2009/07/22 のメモ

『例えば、各作品を読んだ人がキーワードを入力できて、そのキーワードを元にワードクラウドみたいに作家をタイプ別にヴィジュアル的に配置できるような仕掛けとか・・・。』
はてブとかのデータを元に実装できるかもと思いました(が時間がない)

久しぶりにauから期待できそうな技術の話題が。来年出るはずのAndroid携帯と組み合わせればかなりイケそうな気がする

民主党の一連の混乱した政策についての判りやすいまとめ。
経済政策に失敗して今以上の不況になって次の参院選で大敗→そして伝説へ…というパターンになりそう

タイの女学生イラスト。リブログされまくってる感

Powered by Livedoor Clip
カテゴリー: Memo