2009-08-11 (火)
■ PHP4 で HMAC-SHA256 などの hash_hmac() 関数を使えるようにする
Amazon Product Advertising API を使用するには、HMAC-SHA256 方式の署名が必要になりますが、 この計算に用いる hash_hmac() 関数は PHP 5.1.2 以上の関数なので、 それ以前のバージョンの PHP では対応するのが難しかったりします。
ということで、SHA-256 や HMAC の計算ルーチンを PHP で実装し、ライブラリ化してみました。 このライブラリを組み込むと、
- hash
- hash_algos
- hash_hmac
- sha1
の関数が、古いバージョンの PHP でも使えるようになります。 今のところ、対応しているハッシュアルゴリズムは、
- MD5
- SHA-1
- SHA-256
の3つです。
PEAR の PHP_Compat ライブラリ を拡張する形で書いたので、
あとで PEAR の方へパッチとして提出して来るつもりですが、
とりあえずここからダウンロードできるようにしておきます。
ライセンスは、PHP_Compat に合わせて LGPL とします PHP_Compat と同じです。
ライブラリの組み込み方については、PHP_Compat のマニュアルを参照して下さい。 hash_hmac() 関数を使うよりも前のどこかで、
if (!function_exists('hash_hmac')) {
require 'PHP/Compat/Function/hash_hmac.php';
}
のようにするのが良いと思います。
32bit と 64bit の環境でテストしたので、たぶん大丈夫だとは思いますが、 もし計算間違いするケースがあったらお知らせください。
(2009/08/13 追記)
PHP_Compat のライセンスですが、 パッケージには PHP ライセンスと書かれており、各ファイルには LGPL と書かれていました。 どちらが正しいのか分かりませんが、 ライセンスは「PHP_Compat と同じライセンス」ということにしておきます。
あと、PHP では 0x80000000 以上の数値は float として扱われる、 ということに気が付いたので、コードを若干修正しました。 動作には影響ありませんが、気になる方はダウンロードし直して下さい。
- 147 http://trac.openpne.jp/ticket/4166
- 76 http://php-meomo.seesaa.net/article/129148539.html...
- 43 http://www.lacrime.net/item_3480.html
- 26 http://shoulder.jp/archives/010100.php
- 19 http://wadaino.jp/detail/52326751
- 12 google検索(hash_hmac)
- 11 http://pink.cc/2009/0820/205547/
- 10 http://xoops.taquino.net/modules/newbb/viewtopic.p...
- 10 google検索(hash_hmac php4)
- 10 http://trac.openpne.jp/changeset/12720
- 10 http://trac.openpne.jp/changeset/12719
- 9 google検索(hash_hmac)
- 8 http://www.revulo.com/
- 7 google検索(hash_hmac)
- 7 http://php-meomo.seesaa.net/
- 6 google検索(hash_hmac)
- 6 http://trac.openpne.jp/changeset/12721
- 6 http://trac.openpne.jp/browser/OpenPNE/trunk/lib/i...
- 6 http://trac.openpne.jp/browser/OpenPNE/trunk/lib/i...
- 6 http://japan.nucleuscms.org/bb/viewtopic.php?t=449...
- 5 http://www.soukyu-mugen.com/artList?tag=PEAR
- 5 http://www.lacrime.net/catid_4.html
- 5 google検索(hash_hmac php4)
- 4 http://www.lacrime.net/item_3480_catid_4.html
- 4 google検索(php HMAC-SHA256ハッシュアルゴリズム)
- 4 google検索(hash_hmac php4)
- 4 google検索(hash_hmac php4)
- 4 google検索(hash関数 php4)
- 4 google検索(f)
- 4 http://sakurae.jp/item/3226
- 3 google検索(hash_hmac PHP4)
- 3 google検索(hash_hmac)
- 3 google検索(php hash_hmac)
- 3 google検索(sha256 php)
- 3 google検索(php4 sha256)
- 3 google検索(php sha256)
- 3 google検索(php sha)
- 3 google検索(php hash_hmac)
- 3 google検索(hash_hmac php4)
- 3 google検索(hash_hmac php4)
- 3 google検索(HMAC)
- 3 google検索(HMAC)
- 3 google検索(hash_hmac php)
- 3 google検索(hash_hmac php4)
- 3 google検索(hash_hmac php)
- 3 google検索(HMAC-SHA256 php)
- 3 google検索(hash_hmac php4)
- 3 http://trac2.openpne.jp/ticket/4166
- 3 http://sakurae.jp/catid/6/page/2
- 3 http://nakagami.blog.so-net.ne.jp/2009-10-02-1
- 3 BIGLOBE検索(php hash_hmac)
- 2 http://www.soukyu-mugen.com/artList?tid=112&yyyymm...
- 2 google検索(php4 hash_hmac)
- 2 google検索(hash_hmac PHP4)
- 2 google検索(hash_hmac php4)
- 2 google検索(hash_hmac php4)
- 2 google検索(SHA256 php4)
- 2 google検索(hash_hmac SHA)
- 2 google検索(hash_hmac)
- 2 google検索(HMAC-SHA256ハッシュアルゴリズム)
- 2 google検索(sha256 php)
- 2 http://www.google.co.kr/search?complete=1&hl=ko&ne...
- 2 google検索(hash_hmac)
- 2 google検索(php hash_hmac)
- 2 google検索(hash_hmac)
- 2 google検索(hash_hmac)
- 2 google検索(2)
- 2 google検索(php HMAC with the SHA256ハッシュアルゴリズム)
- 2 google検索(hash_hmac php4)
- 2 google検索(hash_hmac)
- 2 google検索(PHP_Compat_Hash.tgz)
- 2 google検索(hmac php4)
- 2 google検索(sha256 php)
- 2 google検索(sha256)
- 2 google検索(php sha256)
- 2 google検索(php hash_hmac)
- 2 google検索(hmac-sha256 php)
- 2 google検索(hash_hmac PHP)
- 2 google検索(hash_hmac インストール)
- 2 google検索(hash_hmac)
- 2 google検索(hash_hmac())
- 2 google検索(SHA-256)
- 2 google検索(PHP_comat hash_hmac)
- 2 google検索(HMAC-SHA256)
- 2 google検索(HMAC with the SHA256ハッシュアルゴリズム)
- 2 google検索(hash_hmac)
- 2 google検索(php4 hash を使えるように)
- 2 google検索(sha256 php)
- 2 google検索(php sha256)
- 2 google検索(php sha2 関数)
- 2 google検索(php hmac-sha256)
- 2 google検索(hash_hmac)
- 2 google検索(hash_hmac)
- 2 google検索(php4 hash SHA-256 )
- 2 google検索(php4 hash_hmac)
- 2 google検索(hash_hmac php4)
- 2 google検索(sha256)
- 2 google検索(HMAC with the SHA256)
- 2 google検索(hmac)
- 2 google検索(php4 sha)

失礼しました。
どうやらChromeの場合のみgz関連のバグで0バイトになってしまうようです。
Firefoxではダウンロードできました。
ご指摘ありがとうございます。Google Chrome だとダウンロードできない、というのは全く気付いていませんでした。一応、Web サーバの設定を見直すことで修正できたと思いますので、作業記録をこちらに書いておきました。
http://www.revulo.com/blog/20100828.html#p01