年末年始の調べごと
とりあえず本1冊読み終わったので、頼まれている調べごとを始める。内容は某Java APIを使って、パスワードを書き換え可能か?ということ。メジャーなAPIだと思っていたけど、詳しく書かれたサイトは見つけられず。かといって、自分で調べ始めたらまず終わりそうにない。みつけたサンプルプログラムとAPIリファレンスを頼りに着手。
まず属性と値の取得。これはサンプルコードを改造してできた。でもパスワードが取得できていない。うーん。多分、管理者権限で接続すれば出てくるでしょ、と推測したら大正解。出てきました。でもパスワード自体は暗号化されてるのね。比較対照用のbrowserでも暗号化されたまま。入力したパスワードのverifyのOK/NG判定はできる。ということはone-wayなんだね。
で、ぐぐってみると「パスワードはBase64エンコードしたものをSHAハッシュ値に変換したものを格納」と書かれている記事を発見。サンプルコードもあったのでコンパイルしたら、Base64でエラー。JDK1.4のAPI使ってるのね。こっちは1.3が前提。そこの部分は、Jakarta Commonsのcodec(http://jakarta.apache.org/commons/codec/)で置換。でも結果はNG。テストプログラムでセットした(はず)のパスワードが、browserのverifyで失敗する。うーん。
ここでbrowserに表示される暗号化されたパスワードに{CRYPT}という文字列が付いてることに着目。これもぐぐって調べたところUNIXのcrypt(3)のことらしい。これはJava Cryptography Extension(JCE)に入っているらしいが、よくわからないのでパス(多分DESのところでいいんだろうけど)。代わりにもっとそのものズバリのjarを拾ってきて試したらOK。browserのverifyが通った。でもこれでいいのかな?ちと不安。
追記:
作ったコードをJSPに埋め込んで、Web browserからパスワード更新ができるようにしてみる。とりあえず自分はここまででいいかな?>某メンバ。まだ
- SSL必要?
- 該当ユーザがいなかったときの処理
- パスワードに日本語が含まれている場合の処理
- ちゃんと更新できたかどうかのチェック
- そのほかエラーチェック
が残っているけど、その辺は今回の内容を検証して、その上でこの方法で行こう、となったときに、きちんと時間をとってやってもらうことにしようっと。
追記2:
簡単なレポートも作成。あとは頼みますm(..)m。さ~てと、また読書しよっかな。