煮詰まった
このところある仕事で煮詰まっている。ちっとも前に進まない。こういうときは気分転換に限ると思って、個人的なちょっとした名簿の簡易データベースをPerlでつくってみた。そして今回、パスワードの暗号化というヤツに初挑戦してみたのだ。
暗号化に使うコマンド「crypt()」って、ようするに意味のない文字列を発生させるもののようだ。入力された文字列に乱数的に発生させた文字を加え、ゴニョゴニョして作成するという。しかもこれ、元に戻せないという。戻せないから暗号を盗まれても危険はかなり薄いらしい。 戻せないものを照合するには、アクセス時に入力されるパスワードに対して、今度は乱数文字ではなくて保存暗号中のキー文字を使って同じ暗号化処理を行い、保存されている暗号パスワードと比較するのだという。なるほど、なるほど。
とりあえず、あちこち参考にしながらなんとか暗号を作るスクリプトができた。実験すると画面に意味のない文字列が並ぶ。おお、まさしく暗号や。ちょっと満足して、データ保存時にパスワード暗号化を実行するようにした。 すると、あれ? 上書き保存するとアクセスエラーになるではないか。考えてみると、保存しようとしているデータがパスワードそのものか暗号化済みかを判断する仕組みはつくってない。だから、保存するたびに律儀に暗号化を繰り返し、まったく別の文字列になるわけだ。これでは合致するわけがない。 そこで、保存時に入力値と保存値を比較して、異なる場合だけ暗号化を実行するように修正した。こんどはうまくいった。なるほどなるほど。
こんな感じで、実際にやってみては「えっ、これって意味ないじゃん」というようなことの繰り返しで時間が過ぎていく。さまざまなケースを想定してそれへの対応を考えていくのって、けっこう面白い。気がついたらすっかりハマッていた。 おかげでまだ、焦眉の問題は煮ほぐれないのだが……。
|