まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2009-08-04 (火) 2009-08-13 (木) > 最新


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 として扱われる、 ということに気が付いたので、コードを若干修正しました。 動作には影響ありませんが、気になる方はダウンロードし直して下さい。

このエントリの続き: 2009-08-13 (木)
Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のコメント(全2件) [コメントを書く]
# 通りすがり (2010-08-27 (金) 01:27)

失礼しました。
どうやらChromeの場合のみgz関連のバグで0バイトになってしまうようです。
Firefoxではダウンロードできました。

# revulo (2010-08-28 (土) 06:55)

ご指摘ありがとうございます。Google Chrome だとダウンロードできない、というのは全く気付いていませんでした。一応、Web サーバの設定を見直すことで修正できたと思いますので、作業記録をこちらに書いておきました。

http://www.revulo.com/blog/20100828.html#p01

本日のリンク元

編集