Javaってなんだか面倒くさい

|
Clip to Evernote Javaってなんだか面倒くさい

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

プロフィール

e-m@il @ddress