1
public static function blowfish($password, $storedpass = false) {
    //if encrypted data is passed, check it against input ($info) 
      if ($storedpass) { 
            if (substr($storedpass, 0, 60) == crypt($password, "$2a$08$".substr($storedpass, 60))) { 
                return true; 
            }  else { 
                return false; 
            } 
      }  else { 
            //make a salt and hash it with input, and add salt to end 
            $salt = "143cd669b02e155c3cca6e";//substr(bin2hex(openssl_random_pseudo_bytes(22)), 0, 22);
            //for ($i = 0; $i < 22; $i++) { 
                //$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1); 
            //} 

            //return 82 char string (60 char hash & 22 char salt) 
            return crypt($password, "$2a$08$".$salt).$salt; 
     }
}

print(substr($storedpass, 0, 60)."<br />");
print(crypt($password, "$2a$08$".substr($storedpass, 60))."<br />");
print(substr($storedpass, 60));

結果を生成します。

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
143cd669b02e155c3cca6e

以前に 22 文字のランダムなソルトを生成していたことがわかります。また、PHPASS についてすべて知っていること、mt_rand() が CSPRNG ではないことなども知っています。 admin') は、静的ソルトを使用しても別のハッシュを生成します。適切なソルトを生成する substr($storedpass, 60) を出力したことがわかりますが、crypt() 関数を (最初の $storedpass を作成するための同じパラメーターを使用して) 実行すると、別の結果が生成され、認証が破られます。私の(比較的小さく、ミッションクリティカルではない)アプリケーション...

4

1 に答える 1

1

$ password引数を(未定義)として関数に送信しているようです。

これにより、このハッシュが生成されます。

$2a$08$143cd669b02e155c3cca6eM3k8s9BdE4jErJXJ8wSxshJDPcJQVPW

しかし(たとえば)これを実行する場合:

$password = 'admin';
echo $storedpass = blowfish($password)."<br />";

print(substr($storedpass, 0, 60)."<br />");
print(crypt('admin', '$2a$08$'.substr($storedpass, 60))."<br />");
print(substr($storedpass, 60));

if (blowfish($password, $storedpass) == true) {
    echo 1;
}

それは出力します:

$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK143cd669b02e155c3cca6e
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
$2a$08$143cd669b02e155c3cca6eEiYm6ilW1ZC1PBS07LOh2XSq1NODSKK
143cd669b02e155c3cca6e
1
于 2012-08-17T14:55:41.820 に答える