加密数据库中的密码

时间:2014-03-06 13:16:25

标签: c# encryption passwords

我有这个密码,假设它是:

Testabc123

它存储在数据库中,但数据库中的密码字段显示密码Testabc123。我希望当用户打开数据库时,密码字段不再显示Testabc123,而是其他用户无法访问的内容。只有知道密码的用户才能这样做。

任何帮助?

谢谢

你的回答非常感谢!

4 个答案:

答案 0 :(得分:3)

不要将纯文本密码存储在数据库中。对密码使用哈希函数,使得存储在数据库中的字符串不可读。另一个用户不能对该字符串做任何事情,即使他知道它。您仍然必须确保其他用户无法更改密码字段,否则即使这样也无济于事,因为他可以在那里复制自己密码的哈希值。

检查有关在数据库中存储密码的其他一些问题(或谷歌)。关于这方面应该有很多信息。

答案 1 :(得分:0)

您是否尝试使用盐渍哈希来保存密码?还是加密?

查看Password encryption

答案 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();
}