前回、Javaでちゃんと動くことが確認されたので、週末にC#でワンタイムパスワードのソフトウェアトークンを書いてみました。見てくれは時間があるときもう少しオシャレにするとして、とりあえずこんな感じ、、、


何回ボタン押してもハードウェアトークンのと同じ値がちゃんと出てきます。にょほほ、、、、
RFC 4226 HOTPアルゴリズムのJavaからC#の移植は簡単だった、、、、というより、Javaのコードなんか全く参考にしないで書いてしまいました。
今回のやつをやってみて、Javaが使いにくいと思うのは符号なし整数(unsigned int, unsigned long)がプリミティブとして扱えなくて、byte型が符合(+、−)を持っちゃっている所です。
C#は符合無しのulongのuintもあり、byte型はデフォルトで符合無しの数になっています。もちろん符合付きのlong, int, sbyteもあります。符合無しを選べる分、符合を気にした余計な処理も必要なくてスッキリとしたプログラムになりました。行数も2/3ぐらいにはなっているでしょうか。
今回のは共通鍵コンテナを読むのにAESとHmacSHA1を、HOTPにはHmacSHA1を使うんですが .NET ではあっさり問題なくでいました。AESについてはブロックモードとパディングがどうなんかなぁ、、、と思いましたが、何も設定しないで.NETのRijndaelManagedクラスを使えばオーケーでした。これ使えば"AES/CBC/PKCS5Padding"になるということなんだと思います。
逆に、ブロックモードとパディングを設定したい場合にはどうなっちゃうんでしょうね???
OATHについては、やりたかった事は大体できたので連載的なものは今回でおしまいってことで、、、m(_ _)mとりあえず、.NETのXPathも使いこなせるようになったんで良かったです(−−;


何回ボタン押してもハードウェアトークンのと同じ値がちゃんと出てきます。にょほほ、、、、
RFC 4226 HOTPアルゴリズムのJavaからC#の移植は簡単だった、、、、というより、Javaのコードなんか全く参考にしないで書いてしまいました。
符合なし(unsigned)は楽チン
今回のやつをやってみて、Javaが使いにくいと思うのは符号なし整数(unsigned int, unsigned long)がプリミティブとして扱えなくて、byte型が符合(+、−)を持っちゃっている所です。
C#は符合無しのulongのuintもあり、byte型はデフォルトで符合無しの数になっています。もちろん符合付きのlong, int, sbyteもあります。符合無しを選べる分、符合を気にした余計な処理も必要なくてスッキリとしたプログラムになりました。行数も2/3ぐらいにはなっているでしょうか。
暗号アルゴリズム
今回のは共通鍵コンテナを読むのにAESとHmacSHA1を、HOTPにはHmacSHA1を使うんですが .NET ではあっさり問題なくでいました。AESについてはブロックモードとパディングがどうなんかなぁ、、、と思いましたが、何も設定しないで.NETのRijndaelManagedクラスを使えばオーケーでした。これ使えば"AES/CBC/PKCS5Padding"になるということなんだと思います。
逆に、ブロックモードとパディングを設定したい場合にはどうなっちゃうんでしょうね???
OATHについては、やりたかった事は大体できたので連載的なものは今回でおしまいってことで、、、m(_ _)mとりあえず、.NETのXPathも使いこなせるようになったんで良かったです(−−;