ログインフォームが必要な C# アプリケーションを開発しています。ユーザーとパスワードは SQL Server データベースに保存されます。
Functionを使用してCodePass
password をコーディングします。以前にユーザーを追加し、コード化されたパスワードをデータベースに追加しました (ユーザー、パスワード、およびログイン ロールはデータベースに保存されます)。
今、このようにdoLogin関数を呼び出すと
doLogin("Arashdn","123");
0 (間違ったユーザーまたはパスワード) を返します アプリケーションをデバッグした後、hash
(暗号化されたパスワードをデータベースから読み取るための変数) が 123 暗号化されていないパスワードを保持していることがわかりました。
問題は何ですか?
ここに私のコードがあります:
public class DB
{
public static string constr = "Server=localhost;Database=University;
Integrated Security=true;MultipleActiveResultSets=True;";
public static string userTable = "Users", userPassword = "Passwd",
userName = "UserID", loginRole = "Role";
}
public class login
{
public int doLogin(string user, string pass)
{
string role="0";
SqlConnection conn = new SqlConnection(DB.constr);
try
{
conn.Open();
SqlCommand my_cm = conn.CreateCommand();
SqlDataReader dbread1;
my_cm.CommandText = "Select " + DB.userPassword + " from " +
DB.userTable + " WHERE " + DB.userName + "=" + user;
dbread1 = my_cm.ExecuteReader();
string hash="";
while (dbread1.Read())
{
hash = dbread1[0].ToString();
}
if (CodePass(user, pass) == hash)
{
SqlCommand my_cm2 = conn.CreateCommand();
SqlDataReader dbread2;
my_cm2.CommandText = "Select " + DB.loginRole + " from " +
DB.userTable + " WHERE " + DB.userName + "=" + user;
dbread2 = my_cm2.ExecuteReader();
while (dbread2.Read())
{
role = dbread2[0].ToString();
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State == System.Data.ConnectionState.Open)
conn.Close();
}
return int.Parse(role);
}
public string CodePass(string user, string pass)
{
System.Security.Cryptography.SHA1CryptoServiceProvider sha =
new SHA1CryptoServiceProvider();
return System.Text.Encoding.ASCII.GetString(
sha.ComputeHash(System.Text.Encoding.ASCII.GetBytes(user + pass)));
}
}
ありがとう