2013/05/16 - ランキングのパスワード問題解決

12日に書いた,パスワードが違っていてランキング更新できない問題が解決した。原因はPerlのCrypt関数。パスワードを暗号化するのにPerlのCryptを使っているのだが,ソルトとして秒を使っている。しかし,この関数はソルトとして0,1,…,8,9を指定すると00,11,…,88,99を返すようだ。このため,認証をしようとするとソルトとして00~99を使ってしまい,パスワード間違いと判定する。

難しいのは,0,1,2,3,4,5秒と00,11,22,33,44,55秒の見分けがつかなくなっているところ。今回は,運良くDBの中にユーザ登録時の日時が入っていたので,なんとか見分けることができた。

この問題は多分2002年頃(Perl5にしたとき)から起こっていたはず。多分,新しく記録を登録する人は多いけど,記録を更新する人はそんなに多くないから今まで誰からも報告がなかったのではないかと思う。

コメントする