2011-07-30 6 views
0

私の失敗したコードです。私は文法に慣れているので、それが問題かもしれないと推測しています。暗号は私が理解するのにはしばらく時間がかかりましたが、基本的に一見ランダムな塩が生成され、「暗号化された」パスワードに格納されます。だからあなたがそれに対してテストしたいときは、保存されたパスワードから塩を取り出す必要があります。したがって、sign_inコードは長くなります。crypt()を正しく動作させるにはどうすればよいですか?

sig_in

$query = "SELECT pass FROM cr WHERE email='$email'"; 
$row = mysql_fetch_row(database::query($query)); 
$pass = crypt($pass, $row[0]); 
$query = "SELECT email,pass FROM cr WHERE email='$email' AND pass='$pass'"; 
if (mysql_num_rows(database::query($query)) == 0) 
    { 
+0

「$塩」が何をしているのか、それを使って塩を使って計算された一致する値を確認する方法を理解できません。 –

+0

私は今です。塩は無作為に遺伝子導入されている。したがって、私は同じパスワードの異なる保存パスワードハッシュを取得します。異なっているということ以外にも、長さが違っていて、それは私のコードを壊していたものでした。 mysqlテーブルにはさらに多くのスペースが必要でした。それは今働く。 –

答えて

3

時にsign_up

$pass = crypt($pass); 
    database::query("INSERT INTO cr VALUES ('$fname', '$lname', '$email', '$pass')"); 

チェックインの際、インサートは、ここでは使用することができますbcryptヘルパークラスです。

使用法:

$bcrypt = new bcrypt(7); // number of rounds 
$hash = $bcrypt->hash('password'); 
$isGood = $bcrypt->verify('password', $hash); 
echo "$hash $isGood" 

PS - あなたのコードは、SQLインジェクションの脆弱性です。準備されたステートメントを検討するPDOとMySQLiをチェックしてください。

編集 - クラスからいくつかの定義されていない定数を取り除くのを忘れましたので、気軽にBCRYPT_ROUNDSとその他のものを削除してください。謝罪。

+0

+1非常に良い答えです。 – Josh

+0

'BLOWFISH'は非常に優れた暗号化暗号です。 –

+0

このコードは、[phpass](http://www.openwall.com/phpass/)に適合しているようです。それは一見価値がある! –