0

私と、従業員が最初にloginIDとパスワードを入力してシス​​テムに登録するアプリケーションに取り組んでいます。パスワードはハッシュ化およびソルト化され、Loginテーブルに保存されます(両方の値がloginID値とともに保存されます)。ただし、コードをステップスルーし、(登録プロセスの後で)アプリケーションにログインすると、ハッシュ値とソルト値が一致しなくなります。

ユーザーがシステムにログインするときに、ユーザーのパスワードを確認するにはどうすればよいですか?

暗号化機能:

protected static void EncryptPassword(eWebEmployee oEmp)
{
    // Create Hash & Salt
    sysSecurity oSecurity = new sysSecurity();
    oEmp.EmpPasswordSalt = oSecurity.CreateSalt(5);
    oEmp.EmpPasswordHash = oSecurity.CreatePasswordHash(oEmp.EmpPasswordSalt, oEmp.EmpPassword);        
}  

データベース呼び出し:

oDbConn.Open();
DbDataReader oDbDataReader = oDbCommand.ExecuteReader();
while (oDbDataReader.Read())
{
    if (!oDbDataReader.IsDBNull(0) && !oDbDataReader.IsDBNull(1))
    {
        if (oEmp.EmpPasswordSalt == oDbDataReader.GetString(1)
            && oEmp.EmpPasswordHash == oDbDataReader.GetString(0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
oDbConnection.Close();
}
4

2 に答える 2

2

私があなたのコードを読む方法では、毎回新しいソルトを作成します。データベースからソルトを取得し、ユーザーが指定したパスワードを使用してハッシュを計算してから、ハッシュをデータベースに保存されているハッシュと比較する必要があります。それらが等しい場合、ユーザーは正しいパスワードを入力しました。登録時にのみ新しいソルトを作成します。

于 2012-07-11T13:58:05.780 に答える
1

コードの目的を理解するのは少し難しいですが、通常はソルト値とパスワード文字列を使用してハッシュを作成します。再度ログインするときは、同じソルト値を使用してまったく同じことを行います。次に、パスワードハッシュをデータベース内のハッシュと比較します。

于 2012-07-11T13:59:50.347 に答える