しらたまのコミッタ日記

2010-04-02

[]HMAC-SHA1 03:48

OAuthやxAuthなどで使うHMAC-SHA1について、一部で要望があるようなので書いてみた。

一応NYSL書いてますが、ようは自由に使ってもらって結構使って何があっても知らんよ、と言うことなのであんまり気にしないで下さい。

 

12:18追記:鍵が規定より長かったときの処理がおかしかったので修正。

http://www.ipa.go.jp/security/rfc/RFC2104JA.htmlを参考に作成

/*

NYSL Version 0.9982

A. 本ソフトウェアは Everyone'sWare です。このソフトを手にした一人一人が、

ご自分の作ったものを扱うのと同じように、自由に利用することが出来ます。

A-1. フリーウェアです。作者からは使用料等を要求しません。

A-2. 有料無料や媒体の如何を問わず、自由に転載・再配布できます。

A-3. いかなる種類の 改変・他プログラムでの利用 を行っても構いません。

A-4. 変更したものや部分的に使用したものは、あなたのものになります。

公開する場合は、あなたの名前の下で行って下さい。

B. このソフトを利用することによって生じた損害等について、作者は

責任を負わないものとします。各自の責任においてご利用下さい。

C. 著作者人格権は しらたま/whiteball に帰属します。著作権は放棄します。

D. 以上の3項は、ソース・実行バイナリの双方に適用されます。

しらたま

http://whiteball.m7.coreserver.jp/

white_ball_11/hotmail.com

#*/

!B=64

!L=20

●HMACSHA1取得(秘密鍵で内容の)

 #秘密鍵の長さの調整

 秘密鍵のバイト数

 もしそれ>Bならば

  秘密鍵からSHA1取得

  2で行揃え

  反復

   INT(「$」対象)を秘密鍵の回数に「byte」でバイナリ設定ハッシュ関数出力のバイナリ変換

  秘密鍵は秘密鍵のL バイト左部分

  秘密鍵のバイト数

 もしそれ<Bならば

  「{\0}」を(B-それ)だけリフレイン

  秘密鍵は秘密鍵&それ

 

 #鍵から作る2つの文字列の準備

 鍵Iとは文字列。鍵IにBを確保

 鍵Oとは文字列。鍵OにBを確保

 文字とは整数

 B/4

  秘密鍵の(回数-1)*4+1を「DWORD」でバイナリ取得

  文字はそれ

  XOR(文字,$36363636)を鍵Iの(回数-1)*4+1に「DWORD」でバイナリ設定

  XOR(文字,$5C5C5C5C)を鍵Oの(回数-1)*4+1に「DWORD」でバイナリ設定

 

 #ハッシュ関数の適用

 経過とは文字列

 経過にLを確保

 

 (鍵I内容)からSHA1取得

 2で行揃え

 反復

  INT(「$」対象)を経過の回数に「byte」でバイナリ設定ハッシュ関数出力のバイナリ変換

 

 (鍵O経過)からSHA1取得

 2で行揃え

 反復

  INT(「$」対象)を経過の回数に「byte」でバイナリ設定ハッシュ関数出力のバイナリ変換

 

 経過を戻す

出力確認

鍵とは文字列

#適当に鍵生成

鍵にBを確保

B

 回数-1を鍵の回数に「byte」でバイナリ設定

鍵で「こんにちは」のHMACSHA1取得

表示

バイナリダンプ

表示

EviEvi 2012/03/26 14:52 That saves me. Thanks for being so sesnbile!

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/white-ball/20100402
リンク元
200612
200701020304050708101112
20080103040506070912
200904
20100204
201104