我有这个密码,假设它是:
Testabc123
它存储在数据库中,但数据库中的密码字段显示密码Testabc123
。我希望当用户打开数据库时,密码字段不再显示Testabc123
,而是其他用户无法访问的内容。只有知道密码的用户才能这样做。
任何帮助?
谢谢
你的回答非常感谢!
答案 0 :(得分:3)
不要将纯文本密码存储在数据库中。对密码使用哈希函数,使得存储在数据库中的字符串不可读。另一个用户不能对该字符串做任何事情,即使他知道它。您仍然必须确保其他用户无法更改密码字段,否则即使这样也无济于事,因为他可以在那里复制自己密码的哈希值。
检查有关在数据库中存储密码的其他一些问题(或谷歌)。关于这方面应该有很多信息。
答案 1 :(得分:0)
您是否尝试使用盐渍哈希来保存密码?还是加密?
答案 2 :(得分:0)
绝不将密码作为纯文本存储在数据库中。加密它们,甚至更好,哈希它们。 我用来哈希密码的.NET库是BCrypt.NET
答案 3 :(得分:0)
与提到的其他海报一样,绝不会以纯文本或加密方式将密码存储在数据库中。首先对它们进行哈希处理,然后在登录过程中,对提供的密码进行哈希处理,并将其与数据库中的哈希进行比较。以下是一些散列代码:
//Author: Racil Hilan
/// <summary>Defines the function used in generating the hash.</summary>
public enum HashAlgorithm { MD5, SHA1, SHA256, SHA384, SHA512 }
//Author: Racil Hilan
/// <summary>Hashes a string using the specified algorithm.</summary>
public static string HashString(string StringData, HashAlgorithm Algorithm) {
System.Security.Cryptography.HashAlgorithm alg;
switch (Algorithm) {
case HashAlgorithm.MD5:
alg = MD5.Create();
break;
case HashAlgorithm.SHA1:
alg = SHA1.Create();
break;
case HashAlgorithm.SHA256:
alg = SHA256.Create();
break;
case HashAlgorithm.SHA384:
alg = SHA384.Create();
break;
case HashAlgorithm.SHA512:
default:
alg = SHA512.Create();
break;
}
return HashString(StringData, alg);
}
//Author: Racil Hilan
/// <summary>Hashes a string using the provided algorithm.</summary>
private static string HashString(string StringData, System.Security.Cryptography.HashAlgorithm Algorithm) {
byte[] Hashed = Algorithm.ComputeHash(Encoding.UTF8.GetBytes(StringData));
return BytesToHex(Hashed);
}
//Author: Racil Hilan
/// <summary>Converts a byte array to a hex string.</summary>
private static string BytesToHex(byte[] bytes) {
StringBuilder hex = new StringBuilder();
foreach (byte b in bytes)
hex.AppendFormat("{0:X2}", b);
return hex.ToString();
}