Javaっていうか,型に厳しい言語は面倒くさい(ぇぇ!).今日は論文を書きながら,実証コードを書いてみました.言語は何でも良かったんだけど,なるべく標準機能だけでできて,コードに苦労せずさらっと書けて欲しかったので,なんとなくJavaならいけるかなと思って,Javaを使ってみた.結論からいえば,PHPでやるべきだった.面倒くさかった.
今日学んだこと!
・byte[]をprintlnで表示するには
.toString()じゃ上手くいかない.独自にメソッドを書かないといけないらしい.なんたる面倒くささ.こんなやり方もあるっぽい.
・HMAC的な計算は
javax.cryptoにMacってクラスがあるっぽ.こんなコードで遊べるっぽ.
import java.security.*;
import javax.crypto.*;
public class hmacsha2 {
public static void main(String[] args) throws Exception {
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA256");
SecretKey sk = kg.generateKey();
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(sk);
byte[] result = mac.doFinal("hoge".getBytes());
}
}
へー.
・BASE64エン/デコができない
えー.って感じ.不便すぎる.(参考:javaにおけるbase64の性能テスト - トラシスラボ 技術ブログ)
・色々調べていたら
OAEPとかパディングとか標準で積んでるみたい.使ったことなかった.最早,BigIntegerでRSAを書いてる場合じゃない?CryptixとかGUN Cryptoとか,強力な暗号ライブラリがあるっぽい.まだ使ってないけど.
あと,暗号強度の制限があるらしい.
デフォルトの Sun JDK 環境で使用できる暗号化アルゴリズムは 輸入管理制限 によってキー長に制限が設けられています。
(中略)ほとんどのアルゴリズムに 128bit の制限がかけられています。
なるほど.とりあえず,解除してみた.
200810221046追記:
Java5から,System.out.printfなるメソッドが追加されていて,C言語ライクな出力ができる模様.
for(int i=0;i<result.length;i++)
System.out.printf("%02x",result[i]);
関連:
J2SE 5.0の新機能 ――第4回 Javaのprintf - ITアーキテクト [IT Architect]
[Java 5]C言語からの移植に便利なprintfの注意点 - @IT