CakePhp 1.3 を使用して構築された既存の Web サイトがあります。その Web サイトでは、パスワード ハッシュに MD5 アルゴリズムを使用しました。
CakePhp のバージョンを 2.3.5 にアップグレードしたいのですが、パスワード ハッシュに MD5 を使用できません。
CakePhp 2.x で MD5 を使用できない理由を知りたいです。?
CakePhp 1.3 を使用して構築された既存の Web サイトがあります。その Web サイトでは、パスワード ハッシュに MD5 アルゴリズムを使用しました。
CakePhp のバージョンを 2.3.5 にアップグレードしたいのですが、パスワード ハッシュに MD5 を使用できません。
CakePhp 2.x で MD5 を使用できない理由を知りたいです。?
md5 は、パスワードのハッシュに適したハッシュ アルゴリズムではありません。使用しないでください。その理由を説明する多くの参考文献があります - phpマニュアルを含みます:
md5() や sha1() などの一般的なハッシュ関数がパスワードに適さないのはなぜですか?
MD5、SHA1、SHA256 などのハッシュ アルゴリズムは、非常に高速かつ効率的に設計されています。最新の技術とコンピューター機器により、元の入力を決定するために、これらのアルゴリズムの出力を「総当たり」することは簡単になりました。
最新のコンピューターはこれらのハッシュ アルゴリズムを非常に迅速に「逆転」できるため、多くのセキュリティ専門家は、パスワード ハッシュにアルゴリズムを使用しないことを強く提案しています。
setHashを使用してデフォルトのハッシュ アルゴリズムを変更できます。パスワードに推奨されるハッシュ アルゴリズムは、blowfish です。
Security::setHash('blowfish');
本当にしたい場合は、setHash
md5 を使用するように変更できます。
しかし、それは良い考えではありません。
古いアプリケーションの貧弱なセキュリティに対応するためだけに、新しい/更新されたアプリケーションのセキュリティを妥協しないでください。前のアプリケーションと同じハッシュ アルゴリズム (およびソルト) を使用する代わりに、次のようなロジックを使用できます (疑似コード)。
$username = $this->data['User']['username'];
$plainText = $this->data['User']['password'];
$user = current($this->User->findByUsername($username));
Security::setHash('blowfish');
$blowfished = Security::hash($plainText, 'blowfish', $user['password']);
if ($blowfished === $user['password']) {
return true; // user exists, password is correct
}
$oldSalt = Configure::read('configure.this');
$md5ed = Security::hash($plainText, 'md5', $oldSalt);
if ($md5ed === $user['password']) {
$this->User->id = $user['id'];
$blowfished = Security::hash($plainText);
$this->User->saveField('password', $blowfished);
return true; // user exists, password now updated to blowfish
}
return false; // user's password does not exist.
この種のロジックは複雑ではなく、不適切なハッシュ アルゴリズムを使い続ける必要がありません。