我試過使用UTF8算法和SHA256進行密碼加密,但被建議不要使用它們。相反,我被建議使用DPAPI。我瀏覽了幾個谷歌示例代碼,但不清楚。你能幫我用DPAPI算法嗎?在C#中進行DPAPI密碼加密並保存到數據庫中。然後使用密鑰對其進行解密
1
A
回答
0
根據MSDN,DPAPI「使用用戶或機器憑據來加密或解密數據」。我認爲它使用DES或AES算法。
但是對於密碼,在保存到數據庫之前,您應該始終使用帶鹽的單向散列函數(MD5,SHA1 ...)。即使黑客可以訪問你的服務器,他也永遠不能解密用戶的密碼。
所以,只需堅持使用您的SHA256解決方案。記得在散列之前添加一些鹽。
4
您可以使用ProtectedData類訪問DPAPI。 有兩種加密模式:
- CurrentUser:受保護的數據與當前用戶相關聯。只有在當前用戶上下文下運行的線程才能解除數據保護。
- LocalMachine:受保護的數據與機器上下文相關聯。計算機上運行的任何進程都可以取消數據保護。此枚舉值通常用於服務器特定的應用程序,該應用程序在不允許不受信任的用戶訪問的服務器上運行。
編碼字符串,並返回一個Base64編碼字符串,你可以在你的數據庫中保存:
public static string Protect(string stringToEncrypt, string optionalEntropy, DataProtectionScope scope)
{
return Convert.ToBase64String(
ProtectedData.Protect(
Encoding.UTF8.GetBytes(stringToEncrypt)
, optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
, scope));
}
解碼Base64編碼字符串(您以前保存在數據庫中):
public static string Unprotect(string encryptedString, string optionalEntropy, DataProtectionScope scope)
{
return Encoding.UTF8.GetString(
ProtectedData.Unprotect(
Convert.FromBase64String(encryptedString)
, optionalEntropy != null ? Encoding.UTF8.GetBytes(optionalEntropy) : null
, scope));
}
您需要記住加密只對機器(和用戶,如果您選擇CurrentUser
加密模式)有效,所以需要在同一臺服務器上執行加密/解密。
如果您打算在負載平衡環境see this article下使用DPAPI。
讓我知道你是否需要更多信息。
相關問題
- 1. 使用密鑰文件進行加密,使用密碼進行解密
- 2. 使用IOS上的密鑰對json數據進行加密並使用節點j對其進行解密
- 3. 在java中使用共享密鑰進行加密/解密?
- 4. java使用密鑰對進行加密和解密?
- 5. 使用C++進行加密和解密
- 6. JAVA使用不同的密鑰對字符串進行兩次加密並對其進行解密
- 7. 我們在哪裏存儲密鑰/密碼/鹽進行加密?
- 8. 使用OpenSSL進行AES-256/CBC加密並在C#中解密
- 9. 如何在golang中使用rsa密鑰對進行AES加密和解密
- 10. 使用AES和長密鑰進行一次塊密碼解密
- 11. 使用ansible對加密AWS .pem密鑰文件進行加密
- 12. 使用主密鑰進行Python加密
- 13. 使用OpenSSL密鑰進行Java加密
- 14. 不使用密碼實例或密鑰進行加密和解密
- 15. 使用Java進行AES加密並使用Javascript進行解密
- 16. 使用PGP進行加密並使用GPG進行解密
- 17. 使用CFB 128位AES加密對數據進行加密/解密的代碼
- 18. 需要使用PEM密鑰進行加密和解密
- 19. 使用隨機生成的密鑰進行加密和解密?
- 20. AWS使用什麼密碼/密鑰進行AES-256加密?
- 21. 加密Jar文件,alterate數據,再次對其進行加密,並保存
- 22. 使用DPAPI安全加密密鑰
- 23. 如何使用rsa c僅公鑰進行加密和解密#
- 24. AES在Objective-C中進行加密並在ColdFusion中進行解密
- 25. 使用用戶密碼進行加密
- 26. 使用字典進行加密/解密
- 27. 使用AES進行Objective-C加密並使用PHP解密
- 28. 使用AES加密C並使用Python進行解密
- 29. 在JAVA中使用公共和私有RSA密鑰進行加密和解密
- 30. 解密使用Objective-C與Java進行AES加密的數據
您不想使用MD5或SHA-1,因爲它們速度太快,並且可能會在現代硬件上輕鬆強制實施。你會想要像bcrypt或另一個硬密碼功能。另外,這個問題並不意味着用戶可以控制密碼驗證,只是希望存儲密碼。 – Dan