9

重複の可能性:
PHPを使用してパスワードを暗号化および復号化する最良の方法は?

私は最近PHPで多くのことをしていて、最初のログイン/登録システムを作りたいと思っています。そのため、私はこれを行うための最良の方法を見つけるためにオンラインで多くの読書をしてきました。私はいくつかのガイドに出くわしました、そして私はいくつかの例で混乱しています、そして私がこの道を始める前に私は確かめたいです。

私の質問は、どのように正確にブローフィッシュを使用するのですか?適切なソルトが提供されている場合、crypt()がblowfishを自動的に選択することを読みました。もしそうなら、何が塩のフグを適切にするのですか?

現在、日付と時刻、乱数からソルトを作成し、それをソルト用にハッシュするスクリプトがあります。それはフグで使えるものですか?

4

3 に答える 3

12

つまり、自分で作成しないでください。ライブラリを使用します。

PHP 5.5では、このプロセスを簡単にするために利用できる新しいAPIがあります。これがそのRFCです

また、ここで下位互換性ライブラリを作成しました:password-compat

$hash = password_hash($password, PASSWORD_BCRYPT);

そして、確認します。

if (password_verify($password, $hash)) {
    /* Valid */
} else {
    /* Invalid */
}

また、別のライブラリが必要な場合は、phpassを確認してください

要するに、自分でやらないでください。必要がない。ライブラリをインポートして、それで完了です...

于 2012-12-10T18:27:16.300 に答える
6

http://php.net/manual/en/function.crypt.phpを見てください

約1/3下にスクロールすると、見出しが表示されますExample #3 Using crypt() with different hash types。うまくいけば、これが役立つでしょう!そしてあなたの塩は大丈夫なはずです!

于 2012-12-10T18:22:13.327 に答える
-3

これを試してみてください-テストされていません、PHPでBLOWFISHアルゴを使用する方法を示すためにそれを泡立てました

<?php
class cipher {
private static $mode = 'MCRYPT_BLOWFISH';
private static $key = 'q!2wsd#45^532dfgTgf56njUhfrthu&^&ygsrwsRRsf';

public static function encrypt($buffer){
    $iv                 = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); 
    $passcrypt  = mcrypt_encrypt(constant(self::$mode), self::$key, $buffer, MCRYPT_MODE_ECB, $iv); 
    $encode         = base64_encode($passcrypt); 
    return $encode; 
}

public static function decrypt($buffer){
    $decoded        = base64_decode($buffer); 
    $iv                 = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); 
    $decrypted  = mcrypt_decrypt(constant(self::$mode), self::$key, $decoded, MCRYPT_MODE_ECB, $iv);
    return $decrypted;
}
}
?>

重要!!$ key値を別のランダムな文字列に変更してください!

使用法:

暗号化するには:

$ mystring='速い茶色のキツネが怠惰なラマを飛び越えた'; $ mystring = cipher :: encode($ mystring);

復号化するには:

$ mystring = cipher :: decode($ myencryptedstring);

于 2012-12-10T21:06:37.047 に答える