オンラインで調べて助けを求めた後、sha2ログインフォームを作成しています。以下のリンクのサンプルコードは非常に便利で実用的です(私が正しいことを願っています!??)、私が理解していない唯一のことこれは、このプログラマーが関数を記述し、関数からソルト値を取得する方法です。
http://hungred.com/useful-information/php-better-hashing-password/
define('SALT_LENGTH', 15);
function HashMe($phrase, &$salt = null)
{
$pepper = '!@#$%^&*()_+=-{}][;";/?<>.,';
if ($salt == '')
{
$salt = substr(hash('sha512',uniqid(rand(), true).$pepper.microtime()), 0, SALT_LENGTH);
}
else
{
$salt = substr($salt, 0, SALT_LENGTH);
}
return hash('sha512',$salt . $pepper . $phrase);
}
関数をこれに変更した場合の違いは何ですか?
function HashMe($phrase, $salt) {..}
もちろん、この関数は失敗します。$ saltの前に「&」を付けるのはどういう意味ですか?この&$ salt = nullのように'null'を設定する必要がありますか?'&$ salt'を入れたらどうなりますか?
次に、salt値を取得するには、それをまっすぐに取得して、以下のようにsqlクエリを実行します。
$username = cleanMe($_POST('username'));
$password = cleanMe($_POST('password'));
$salt = '';
$hashed_password = HashMe($password, $salt);
$sqlquery = 'INSERT INTO `usertable` ("username", "password", "salt") VALUES ("'.$username.'", "'.$hashed_password .'", "'.$salt.'") WHERE 1';
..
SQLクエリを準備する前に、次のような関数からソルト値を取得するにはどうすればよいですか?
$salt = "'".salt."'";
$username = "'".$username."'";
$hashed_password = "'".$hashed_password."'";
それから、
$sqlquery = 'INSERT INTO `usertable` ("username", "password", "salt") VALUES ($username, $hashed_password, $salt) WHERE 1';
私がこれを好まない/したくない理由-私のSQLクエリの"'"は、$ firstname='NULL'のようなnull値を持っているためです。そして、名が空/ nullの場合、行に空のフィールドをnullとして「チェック」させたいと思います。
さらに、SQLクエリに「'」が含まれているため、問題が発生したときにめまいがしてデバッグが困難になります...
申し訳ありませんが、このスレッドにはたくさんの質問があります!
ありがとう。