我有一個關於在數據庫中驗證散列文本的問題。現在,已經在數據庫中註冊的UserType被哈希,如下圖所示:刪除在數據庫中散列存儲的組合框項目c#
我希望當存在管理員文本作爲散列存儲在數據庫中時,程序將驗證散列並檢查if驗證是管理員文本。如果是,那麼它只會刪除組合框列表中的管理員文本。
爲什麼我通過Hash將UserType存儲到數據庫的原因是我限制其他UserType以獲得對系統的完全訪問權限並防止黑客將UserType更改爲管理員以外的其他用戶(如果我存儲它只有純文本)在數據庫中找到之後。
以上所述的圖像顯示,用戶類型已被散列,並且被散列的文本是用於用戶類型管理員。
現在,我喜歡這個添加和存儲散列用戶類型的數據庫:
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;
}
非常感謝您!
我真的很感激你的答案
感謝您的解釋,先生,非常有幫助。那麼,一旦程序安裝在用戶的計算機上,我應該只鎖定包含數據庫的文件夾嗎?那麼,任何人都無法通過Windows資源管理器訪問該文件夾,但是如果我鎖定該文件夾,任何人仍然可以訪問數據庫權利先生(僅從程序本身)?出現組合框中的項目並且程序在這一行中工作:'command.Parameters [「@ UserType」]。Value = BCrypt.ValidateHash(_value1,_hashedType);'變成這樣:'command.Parameters [「@ UserType 「] .Value = _value1;' – 2014-10-21 02:09:35
一般來說:你放在用戶電腦上的任何東西都是不安全的。他們擁有電腦。他們最終(通過不同程度的努力)可以完全訪問該計算機上的任何內容。對於_any_安全相關的問題,這不僅僅是你的數據庫。如果你試圖「鎖定該文件夾」(你的意思是在目錄上設置一些安全設置?),管理員用戶仍然可以繞過該目錄。即使您在所有內容中都放置了三十層加密層,您在該PC上本地運行的程序也會提供模板,以顯示如何最終訪問PC上的_everything_。 – 2014-10-21 02:40:01
我的意思是(鎖定文件夾)將密碼放到包含數據庫的文件夾內,因此無法由任何用戶打開(當他們想要通過資源管理器打開該文件夾時,例如數據庫安裝在D:/安裝程序/數據庫/ db1.accdb「,他們查找那個URL並想打開數據庫文件夾,如果他們不知道密碼,他們不能這樣做,但是一旦他們啓動了程序,程序就可以訪問數據庫,但數據庫文件夾仍然被鎖定在這種情況下,用戶不能修改用戶類型,因爲他們的用戶類型限制 – 2014-10-21 06:18:04