目前我正在開發連接到MySQL數據庫以檢索和存儲數據的軟件。該軟件本身正在運行,但我想實現一些新的安全功能。如何使用哈希密碼連接到MySQL數據庫
其中一個安全功能是將數據庫用戶的密碼存儲爲散列而不是純文本。 爲了記錄,我不使用表來驗證用戶,我正在談論數據庫用戶連接到數據庫本身。
我目前使用爲明文傳送口令MySQL數據庫連接字符串:
public abstract Database()
{
ReadConfig();
connectionstring = "SERVER=" + server + ";" +
"DATABASE=" + database + ";" +
"UID=" + username + ";" +
"PASSWORD=" + password + ";";
try
{
connection = new MySqlConnection(connectionstring);
}
catch (MySqlException ex)
{
LogService.Log("ERROR - " + ex.ToString());
}
}
我也是這個數據存儲在用戶的計算機上,因此用戶可以更改服務器地址,數據庫,用戶名和密碼。正如我所說,這是以純文本形式存儲的。以純文本格式存儲的服務器地址,數據庫名稱和用戶名都可以,但我不想以純文本形式存儲密碼。
生成SHA1哈希(或其他哈希方法)不是問題,因爲我已經有一個方法來生成這些哈希。
總之,我想將密碼保存爲散列,並在連接字符串中使用該散列。我怎樣才能實現這個?
編輯: 我知道這是一個'通過默默無聞的安全'解決方案,它不是擴展我的軟件安全的最佳方式。我正在研究如何使用質詢 - 響應方法,但同時我想實施上述。
你使用什麼散列方法? –
如果你能夠實現這一點,它不會爲你提供任何好處,因爲攻擊者可能只是嗅探你發送的散列密碼並在以後重播。爲了有效,您的數據庫必須支持挑戰 - 響應類型的身份驗證,您在該數據庫中以x用戶身份通知數據庫,數據庫向您發送挑戰,並且您的響應基於該挑戰+密碼 - 我不認爲MySQL支持這一點。 – mah
@CuongLe我目前不使用任何散列這個密碼,但我有一個方法來產生一個字符串的SHA1散列。 – Stefan