am從純文本文件的用戶名和密碼[寫入閱讀],但它是一種保護數據的不好方法,是否有其他方法可以做到這一點,很可能是通過使用IV的加密解密算法。保護客戶端數據安全
0
A
回答
0
您可以使用SHA1等哈希編碼您的密碼。
Function getSHA1Hash(ByVal strToHash As String) As String
Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider
Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash)
bytesToHash = sha1Obj.ComputeHash(bytesToHash)
Dim strResult As String = ""
For Each b As Byte In bytesToHash
strResult += b.ToString("x2")
Next
Return strResult
End Function
使用它很簡單!
Console.Write(getSHA1Hash("password"))
所以每當你需要驗證用戶身份,你可以把他輸入密碼,請使用上面的函數計算它的哈希,並確保它是一個簡單的IF子句相同:
if getSHA1Hash(input_password) = HASHED_OLD_PASSWORD then Authenticate()
如果沒有純粹的暴力破解所有可能性,SHA1哈希是不可解密的,所以它是一個非常安全的解決方案。
1
您需要決定是否需要重新解密文本。我會建議,至少對於密碼來說,你可以使用單向散列。如果你使用鹽,你可以使蠻力攻擊散列很困難。理想情況下,應爲每個密碼使用一個單獨的隨機鹽:password + salt = hash。您需要存儲salt以及hash,但它可以以純文本形式存儲,因爲它不是密碼保密的。一個示例實現(使用SHA256):
public class SHA256
{
public static string GetHash(string password, string salt)
{
UTF8Encoding encoder = new UTF8Encoding();
SHA256Managed sha256 = new SHA256Managed();
byte[] hashedDataBytes = sha256.ComputeHash(encoder.GetBytes(salt + password));
return ByteArrayToString(hashedDataBytes);
}
/// <summary>
/// Generates a random 16 character alpha-numeric salt
/// </summary>
/// <returns></returns>
public static string GenerateRandomSalt()
{
const string allowedChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
char[] chars = new char[16];
var rd = new Random((int)DateTime.Now.Ticks);
for (int i = 0; i < 16; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
/// <summary>
/// Converts supplied byte array to hex format string.
/// </summary>
/// <param name="inputArray"></param>
/// <returns></returns>
private static string ByteArrayToString(byte[] inputArray)
{
StringBuilder output = new StringBuilder("");
for (int i = 0; i < inputArray.Length; i++)
{
output.Append(inputArray[i].ToString("X2")); //Return in hex format
}
return output.ToString();
}
}
GenerateRandomSalt方法可用於爲您的密碼生成鹽。關於這類事情,還有很多其他問題。
相關問題
- 1. 保護客戶端數據安全的技巧
- 2. 從Java客戶端保護數據庫
- 3. 保護客戶端邏輯和數據
- 4. 客戶端數據維護
- 5. 保護HTTPS客戶端
- 6. 保護客戶端json
- 7. 用於保存客戶端信息的安全數據結構
- 8. 客戶端/ JS框架的「未保存的數據」保護?
- 9. SQL Server - 強大的客戶端數據保護(多租戶)
- 10. Socket.IO客戶端安全
- 11. CXF客戶端安全
- 12. javascript客戶端安全
- 13. 如何保護Oauth 2.0客戶端ID和客戶端密鑰
- 14. 保護客戶端機器上的客戶端密碼
- 15. 保護SQL Server數據庫的安全
- 16. 電子發現/安全港:可能會保護我的客戶的數據
- 17. AWS S3數據保護使用客戶端加密
- 18. 保護客戶端 - >數據庫遊戲
- 19. 數據保護錯誤時建立在客戶端系統
- 20. 保護用於客戶端處理的數據庫密鑰
- 21. 保護密碼客戶端Firebase
- 22. 春季OAuth2客戶端,CSRF保護
- 23. 如何在客戶端保護socket.io?
- 24. 保護客戶端Java應用程序
- 25. Java客戶端.class文件保護
- 26. 如何保護客戶端MongoDB API?
- 27. 如何通過第三方客戶端保留後端安全
- 28. WordPress的安全客戶端門戶
- 29. 在客戶網絡上保護SQL Server 2008 R2的安全
- 30. MVC保護基於用戶的數據安全
感謝mindw0rk,偉大的方法來解決我的問題,標題來實現你的結果:-) – sarepta 2012-01-10 19:21:37
哈希是_not_加密 – 2012-01-31 04:45:08
修復了我的術語。儘管這對於提問者來說仍然是一個很好的解決方案。 – carlossless 2012-02-03 09:34:39