簡體   English   中英

如何存儲信息,例如加密的密碼,但不存儲在哈希中

[英]How to store information like passwords encrypted but not in hash

我需要在數據庫字段中存儲“類似密碼的信息”。 我希望將其加密,但在使用前需要解密。 所以我不能使用哈希/鹽解決方案。
可以肯定的是,如果攻擊者進入數據庫的距離太遠,它可能已經走得太遠了,但是我認為,這至少可以阻止錯誤的數據轉儲。

  1. 如何加密一個值將其存儲到數據庫中並解密相同的值以供以后使用?

  2. 散列不是一種選擇(實際上我在其他部分上使用了它)。

  3. 私鑰存儲在哪里? 用戶不會提供任何東西。

這是一個C#解決方案,因此.NET特定的東西很棒。 我的問題非常相似,但是我正在尋找基於.net的解決方案: 雙向加密:我需要存儲可以檢索的密碼

編輯:霍根幾乎回答了我的問題。 我在那里找到示例,它們的范圍從非常復雜到非常簡單。 看起來AES仍然不錯,所以我將使用該方法。 謝謝你的幫助。

一種不涉及私鑰的解決方案是使用DPAPI

您可以通過ProtectedData類從.NET使用它。

這是一個例子:

public void Test()
{
    var password = "somepassword";

    var encrypted_password = EncryptPassword(password);

    var decrypted_password = DecryptPassword(encrypted_password);
}

public string EncryptPassword(string password)
{
    var data = Encoding.UTF8.GetBytes(password);

    var encrypted_data = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);

    return Convert.ToBase64String(encrypted_data);
}

public string DecryptPassword(string encrypted_password)
{
    var encrypted_data = Convert.FromBase64String(encrypted_password);

    var data = ProtectedData.Unprotect(encrypted_data, null, DataProtectionScope.CurrentUser);

    return Encoding.UTF8.GetString(data);
}

請注意,這種情況下的DPAPI取決於當前登錄的用戶帳戶。 如果您在應用程序以User1身份運行時對密碼進行加密,則只能解密以相同用戶帳戶運行的密碼。 請注意,如果您以錯誤的方式更改了User1的Windows密碼,那么您將失去解密密碼的能力。 有關詳細信息,請參見此問題

如果您不想使用DPAPI,而是希望擁有一個私鑰。 然后,存儲此類私鑰的最佳位置是用戶的密鑰存儲區。 但是,為了將私鑰存儲在本地用戶存儲中,您需要具有證書。 您可以創建一個自簽名證書,並將其及其對應的私鑰存儲到本地用戶證書存儲中。

您可以使用X509Store類以代碼訪問用戶存儲。 您可以使用它來查找要使用的證書(在C#中為X509Certificate2類),然后使用它進行加密/解密。

這個這個的更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM