スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- | スポンサー広告  TOP

PHP4 「Product Advertising API」をPHP4から使う。その2。HMAC-SHA256自作編。

前回の"「Product Advertising API」をPHP4から使う。その一。HMACへの道。"の続編です。
http://softyasu.blog121.fc2.com/blog-entry-100.html

今回は自前でHMACを実装します。
HMACはRFC2104として公開されていますので、まずその情報をご覧下さい。
http://www.ipa.go.jp/security/rfc/RFC2104JA.html

で、要約すると次のような処理をします。
(1)秘密キーがハッシュのブロック長より大きければ、秘密キー自体をsha256ハッシュ化する。
(2)秘密キーがハッシュのブロック長より小さければ、0でパディングする。
(3)ipadkeyは、ハッシュのブロック長分の0x36と秘密キーのxorをとって作る。
(4)opadkeyは、ハッシュのブロック長分の0x5cと秘密キーのxorをとって作る。
(5)ipadkeyとメッセージ(ハッシュ化データ)を結合して、sha256ハッシュ化する。
(6)opadkeyと(5)の結果を結合して、sha256ハッシュ化する。
で(6)の結果がMACって事になります。

SHA256ハッシュは下記のものを使っています。
http://www.nanolink.ca/pub/sha256/

では、PHPで書いたHMACのクラスです。

<?php
#####################################################################
#   HMAC-SHA256専用クラス
#       Copyright (c)ソフト屋 巣
#####################################################################

//  sha256ライブラリ
require_once('sha256.inc.php');
   
//  参考:RFC2104 http://www.ipa.go.jp/security/rfc/RFC2104JA.html
class HMAC_SHA256 {

    var $ipadkey;   //innerパッドキー
    var $opadkey;   //outerパッドキー
    var $pack_form; //packフォーマット。ブロック長とフォーマット。
   
    //==================================================
    //  コンストラクタ
    //      $key HMACの鍵
    //==================================================
    function HMAC_SHA256($key)
    {
        $this->pack_form = "H64";   //SHA256専用。
        define("HASH_BLOCK_SIZE",64);    //ブロック長
       
        //  鍵のパディング。
        if(strlen($key) > HASH_BLOCK_SIZE) {
            $key = pack($this->pack_form,sha256($key));//大きい場合はハッシュ化。
        } elseif(strlen($key) < HASH_BLOCK_SIZE) {
            $key = str_pad($key,HASH_BLOCK_SIZE,chr(0));
        }
       
        //  inner/outerパッドキーの作成。
        $this->ipadkey = (substr($key,0,HASH_BLOCK_SIZE) ^ str_repeat(chr(0x36),HASH_BLOCK_SIZE));
        $this->opadkey = (substr($key,0,HASH_BLOCK_SIZE) ^ str_repeat(chr(0x5C),HASH_BLOCK_SIZE));
    }
   
    //==================================================
    //  HMAC関数
    //      $msg メッセージ
    //==================================================
    function hmac($msg)
    {
        //  innerハッシュ
        $hashin = sha256($this->ipadkey.$msg);
        //  innerハッシュにouterを合成してハッシュを求める。
        $hash = sha256($this->opadkey.pack($this->pack_form,$hashin));
        //  パックして持ち帰る。
        return pack($this->pack_form,$hash);
    }
}
?>


今回は、ここまで。
次回は実際にHMACを使うサンプルコードをお見せします。

つづく。

以上です。お役に立ちましたら拍手をお願いします

2009/05/19 | 未分類COMMENT(1)TRACKBACK(0)  TOP

コメント

助かりました

PHP4でSHAをどうするのか悩んでましたが、大変助かりました
ありがとうございます

No:18 2009/07/28 03:17 | GEφ #Nkm.CmPw URL編集 ]

コメントの投稿



管理者にだけ表示を許可する

 | BLOG TOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。