2017-11-02 4 views
0

私は簡単な登録とログイン機能を作成する必要があります。私たちはsha1(私は安全ではないことがわかっています)を使用してパスワードをハッシュし、パスワードの先頭に特定の塩を追加する必要があります。データはmySQLデータベースに格納されています。 registration.phpは機能しているようですが、html形式のパスワードとデータベースに保存されているパスワードを比較するのに問題があります。今のところグーグルグーグルではありますが、私はpassword_verify()関数を使ってログイン機能を見つけるだけです。これはsha1で動作しないようです。お詫び申し上げます場合は、ソリューションや明白な、非常に新しいphp。PHP - ログイン機能がsha1ハッシュされたパスワードを使用して、働かせることができません大学のプロジェクトのために

コードの一部が含まれていないため、意図したとおりに動作しています。 html形式のフィールドに何を入力しても、何があっても「無効なユーザー名またはパスワード」が出力されます。

$formUsername = mysqli_real_escape_string($connect, $_REQUEST['username']); 
$formPassword = mysqli_real_escape_string($connect, $_REQUEST['password']); 


$sql = "SELECT passord FROM bruker WHERE brukerNavn = '$formUsername';"; 
$passwordFraDatabase = mysqli_query($connect, $sql); 


$row = mysqli_fetch_assoc($passwordFraDatabase); 
$passordSomString = $row['passord']; 


$salt = 'IT2_2018'; 
$passwordFraForm = sha1($salt . $formPassword); 

if ($passwordFraForm == $passordSomString) { 
    echo("Logged in"); 
} 
else echo("invalid username or password"); 

編集:私はSHA1を使用してはならないと言っているものと、全体の質問を読んで、私は、特に私はSHA1、その大学のプロジェクトを使用するために必要と述べました。 誰かが尋ねたので、これはパスワードが最初の場所に登録されている方法です:PHPのデフォルトで

$email = mysqli_real_escape_string($connect, $_REQUEST['email']); 
$username = mysqli_real_escape_string($connect, $_REQUEST['username']); 
$password = mysqli_real_escape_string($connect, $_REQUEST['password']); 


$salt = 'IT2_2018'; 
$securepassword = sha1($salt . $password); 

$sql = "INSERT INTO bruker (ePost, brukerNavn, passord) VALUES ('$email', '$username', '$securepassword')"; 
if(mysqli_query($connect, $sql)){ 
    echo "user registered!"; 
} else{ 
    echo "could not register user " . mysqli_error($connect); 
} 
+3

データベースにパスワードを登録する方法を教えてください –

+0

パスワードを暗号化するためにSHA1を使用しないでください。 SHA256のようなものを使用するか、単に元のPHP関数 'password_hash();' – Nicolas

+4

**を使用してください**危険**:あなたは[不適当なハッシングアルゴリズム](http://php.net/manual/en/faq.passwords.php )、あなたのユーザーのパスワードの[注意を払う]必要があります(https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet)。 – Quentin

答えて

0

は、機能(関数strcmp)及び(==)演算子を比較し、両方のは、32ビットの文字列の最大値を比較することができます。 (strncmp)関数を使用して32ビット以上の文字列を比較する必要があります。

あなたの場合は、160ビット文字列を生成するsha1を使用しているので、なぜ機能していないのでしょうか。 したがって、strncmp(str1、str2、maximum_length_want_to_compare)を使用してください。 (strncmpは($ passwordFraForm、$ passordSomString、160)== 0){エコー( "にログイン")場合

あなたのケースでは

あろう。 } else echo( "無効なユーザ名またはパスワード");

関連する問題