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