【问题标题】:Encrypt password in database [duplicate]加密数据库中的密码[重复]
【发布时间】:2014-04-09 03:53:30
【问题描述】:

我有这个密码,假设是:

Testabc123

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

有什么帮助吗?

谢谢

非常感谢您的回答!

【问题讨论】:

  • 加密密码,然后保存到数据库。加密不是数据库的工作。
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。
  • 不要存储密码。绝不。甚至没有加密。请改用单向哈希。

标签: c# encryption passwords


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    看看Password encryption

    【讨论】:

      【解决方案3】:

      切勿将密码以纯文本形式存储在数据库中。加密它们,或者更好的是,对它们进行散列。 我用来散列密码的 .NET 库是 BCrypt.NET

      【讨论】:

        【解决方案4】:

        像其他海报提到的那样,永远不要将密码以纯文本或加密形式存储在数据库中。首先对它们进行哈希处理,然后在您的登录过程中,对提供的密码进行哈希处理并将其与数据库中的哈希值进行比较。下面是一些哈希代码:

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

        【讨论】:

          猜你喜欢
          • 2012-02-16
          • 2023-04-08
          • 2020-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-12
          • 2013-08-14
          相关资源
          最近更新 更多