我有一个关于该验证数据库中的散列文本的问题。 眼下,已在数据库中注册用户类型进行散列像下面的图片:
我希望它时,有存储哈希数据库管理员文本,程序将验证哈希和检查验证管理员文本。 如果是的话,那么它会直接删除在组合框列表的管理员文本。
为什么我通过哈希存储在用户类型数据库的原因,是我限制其他用户类型完全进入到系统并防止黑客对用户类型更改为除管理员(如果我保存它由纯文本只)在数据库中,一旦他们发现了它。
上面的图片显示,用户类型已被散列,那就是散列文本是针对用户类型管理员。
现在,我是添加和存储散列用户类型,以这样的数据库:
public static void AddDatabase(string _selectedIndex)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
string query = "INSERT INTO [Member] ([UserType]) VALUES (@UserType)";
connection.Open();
_hashedType = BCrypt.CreateHash(_selectedIndex, BCrypt.GenerateSalt(12));
using (OleDbCommand command = new OleDbCommand(query, connection))
{
command.Parameters.Add("@UserType", OleDbType.VarChar);
command.Parameters["@UserType"].Value = _hashedType;
command.ExecuteNonQuery();
}
connection.Close();
}
}
void button2_Click(object sender, EventArgs e)
{
SystemManager.AddDatabase(this.comboBox1.Text);
}
void Registration_Load(object sender, EventArgs e)
{
if (SystemManager.CheckType("Administrator") != true)
{
this.comboBox1.Items.Add("Administrator");
}
this.comboBox1.Items.Add("Member");
this.comboBox1.SelectedIndex = 0;
}
为了验证它,我使用它就像下面的代码。 但是,当我运行程序,一切都成了空(组合框下拉列表不显示任何东西(空文本)像下图):
public static bool CheckType(string _value1)
{
using (OleDbConnection connection = new OleDbConnection(SystemManager.connectionString))
{
string query = "SELECT COUNT(*) FROM [Member] WHERE [UserType] = @UserType";
connection.Open();
using (OleDbCommand command = new OleDbCommand(query, connection))
{
command.Parameters.Add("@UserType", OleDbType.VarChar);
command.Parameters["@UserType"].Value = BCrypt.ValidateHash(_value1, _hashedType);
_count = (int)command.ExecuteScalar();
connection.Close();
}
}
return _count > 0;
}
非常感谢你!
我真的很感激你的答案