パスワード暗号化について(CGIスクリプト)
現在記事削除処理の、キー暗号化と解読について勉強しているんですが、他の方が書いたソースを読んでもさっぱり意味不明です。技術評論社さんのリファレンスを参考にしてるんですが、どうも載っていないワザが使われているらしく・・・。
まずは暗号化処理です(とある有名ソースから抜粋)。
@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
$encrypt = crypt($password, $salt) || crypt ($password, '$1$' . $salt);
問題は$encryptなんですが、||演算子は、要するに左オペランドの保険みたいなものなんでしょうか?まず、左オペランドが偽になる、ということ自体が分かりません。結果が偽になる、というのは0を返すということでしょうか?
crypt関数が処理を失敗する(?)、ということでも偽になるかもしれないんですが、暗号化処理を失敗などということがあるのでしょうか?
次に、ひとまず左オペランドが偽だった場合ですが、右オペランドに関して、暗号化キーが「$1$xx」の5文字ですよね。暗号化キーは2文字までしか評価されないから、結局これは「$1」と変わらない気がします。というより、まずなぜ「$1$」なんでしょうか?そして、合計5文字の意味は・・・?謎は深まるばかりです。
質問の長さが800文字を超えてしまうので、前半はここで切らせていただきます。
後半は「パスワード解読について(CGIスクリプト)」にて質問させていただいています。
どうかよろしくお願いします。
お礼
早速の回答ありがとうございます とてもいい考えだと思います! 是非使わせてください。 内容が濃くなり、いい提出文が書けそうです。 項目は多い方がいいので、新しいのがもしおありでしたらお願いします。