0

PDOプリペアドステートメントでハッシュとソルティングに使用する適切な形式を誰かに教えてもらえますか? 私はphpから切り替えて、より複雑な関数について心配する前に単純なINSERTステートメントでこれを機能させようとしていますが、オンラインで見たものは何も機能していません.

PHPで私はこれをやっていました:'".sha1($salt + $_POST['password'])."'

私はもう試した:

$password = '123456'; 
$hash = hash('sha1', $password);
$pass1 = hash('sha1', $salt . $hash . $password);

$salt は config.php で定義され、正しく参照され、php の挿入ステートメントで適切に機能します。

編集 -

これは、私が使用している INSERT ステートメントです。

$stmt = $conn->prepare('INSERT INTO customer_info (fname...) VALUES(:fname...)');
$stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
$stmt->execute();   
4

1 に答える 1

1

ほとんどのデータベース システムには適切なパスワード ハッシュ関数が用意されていないため、SQL でハッシュ値を生成することはできません。「PHPからの切り替え」とはどういう意味かわかりませんが、データベースシステムではなく、開発言語にハッシュを生成させてください。

ソルトはパスワードごとに異なる必要があります。グローバルソルトはその目的を果たすことができません。あなたの「塩」は実際にはキー(またはコショウ)であり、常に同じです。ソルトは、ハッシュ値と一緒に保存 (プレーンテキスト) する必要があります。保存されたハッシュと入力されたパスワードのハッシュを比較するためにソルトが必要です。

PHP 5.5 には独自の機能がpassword_hash()ありpassword_verify()、BCrypt パスワード ハッシュの生成を簡素化する準備ができています。この優れた API を使用するか、以前の PHP バージョン用の互換パックを使用することを強くお勧めします。次に、このチュートリアルで、塩とコショウを使用した正しいパスワードの保存について詳しく読むことをお勧めします。

編集:

通常、PDO を使用した挿入は次のようになります。

$password = $_POST['password'];
$hashedPassword = sha1($password . $salt);
$sql = 'INSERT INTO user (name, passwordhash) VALUES (?, ?)';
$sth = $pdo->prepare($sql);
$sth->execute(array('Jack Cornfield', $hashedPassword));

もちろん、ステートメントは異なって見えますが、テーブルとフィールドはわかりません。この例では、ハッシュの生成は純粋な PHP で行われ、結果$hashはプレースホルダーを使用して sql ステートメントにパラメーター化されて追加されます。

于 2012-12-12T09:06:58.150 に答える