• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パスワード暗号化について(CGIスクリプト))

パスワード暗号化についての質問

このQ&Aのポイント
  • パスワード暗号化のキー生成方法について質問があります
  • 質問中の暗号化処理について理解できません
  • 暗号化キーに関して疑問があります

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

いや、Perlのバージョンによるものではありません。 簡単に言うと、Perlの関数cryptは、内部でOS付属のライブラリcryptを 呼んでいるのです。そしてそれが返すものをそのまま返しているだけ。 例えばFreeBSDではデフォルトでMD5が使われます。しかしこれも 切りかえることができます。詳しくは知りませんがLinuxのいくつかの ディストリビューションでもそうらしいですね。 正確には「OSの種類、バージョン、設定による」のです。 よって、Perlを利用するだけのユーザはどちらが使われているのか 調べてそれ用のコードを書くか、あるいはどちらでも大丈夫な ように書く必要があるわけです。 > DESというアルゴリズムで生成した際には$1$を最初の3文字として解釈してしまうのでは このコードがDESのときどう動作するか?という話ですか? ならば先に左オペランドの「crypt($password, $salt)」が真の値を返しますから 「||」の働きによって後半の'$1$'を含むcryptは実行されず、次の行へ進んでしまい ますので問題ありません。

Yuya_Tachibana
質問者

お礼

 ということは、 $encrypt = crypt($password, $salt) || crypt ($password, '$1$' . $salt); において、MD5というアルゴリズムが使われた場合には左オペランドでエラーを返す(偽になる)ため、||演算子により右オペランドで問題なく真を返し、DESが使われた場合には左オペランドの時点で真を返してくれる、ということだったわけですね。ようやく||の謎が解けました。どうやら、初心者にはレベルが高すぎるソース表記だったようで(汗)。  という感じの考察でした。ここで質問しなかったら、そしてわかりやすい回答が得られなかったらかなりの間分からずじまいになるところでした。  とても助かりました。本当にありがとう御座いました。

その他の回答 (1)

回答No.1

OS(正確にはライブラリですが)によっては、cryptはDESではなくMD5のアルゴ リズムによる暗号を生成します。このとき$salt先頭がアルファベットや数字 の並びだと失敗します。MD5だとsaltには「$1$」で始まる文字列を指定します。 実際にはそのあとに続く文字が使われる、とされています。 そこで、上記のようにすればプロバイダのサーバが使っているアルゴリズム がDESでもMD5でもちゃんと動作するというわけです。

Yuya_Tachibana
質問者

お礼

 なるほど、最初が$1$だったのはライブラリの互換性を考えた設定だったわけですか。ライブラリによってということは、Perlのバージョンによってということでしょうかね?  余談  しかしだとすると、DESというアルゴリズムで生成した際には$1$を最初の3文字として解釈してしまうのではないんでしょうか?

関連するQ&A