年末年始の調べごと

とりあえず本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。さ~てと、また読書しよっかな。