首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用c#对密码值进行加密和散列?

如何使用c#对密码值进行加密和散列?
EN

Stack Overflow用户
提问于 2010-01-05 17:25:09
回答 5查看 12.6K关注 0票数 17

大伙们,

我从Preferred Method of Storing Passwords In Database中了解到存储密码的哈希值是安全的……

  • 如何使用c#对密码值进行加密和散列?
  • 如何将存储在数据库中的值与用户提供的值进行比较?
EN

回答 5

Stack Overflow用户

发布于 2010-01-05 17:35:56

简单散列:

代码语言:javascript
复制
public string GetSHA256Hash(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                throw new ArgumentException("An empty string value cannot be hashed.");
            }

            Byte[] data = System.Text.Encoding.UTF8.GetBytes(s);
            Byte[] hash = new SHA256CryptoServiceProvider().ComputeHash(data);
            return Convert.ToBase64String(hash);
        }
票数 5
EN

Stack Overflow用户

发布于 2010-01-05 17:29:57

对于散列,你在System.Security.Cryptography中有几种支持的算法,对于你的用例,你可能想要选择一个基于SHA的散列或类似的东西。

关于比较:您不会将DB值与用户给您的值进行比较。使用的加密/散列函数与最初在DB中存储密码时使用的函数相同,这次使用的是用户输入。如果结果等于数据库中的哈希值,则密码(可能)是正确的。

这样做的目的是,有权访问数据库的任何人都不能以明文形式检索密码,甚至您的程序也不需要知道它(只有接受用户输入的部分才会在短时间内拥有它)。

链接(甚至可能是重复的):

票数 0
EN

Stack Overflow用户

发布于 2010-01-05 17:30:43

严格地说,你应该salt the password然后散列它,以避免字典攻击。您可以在System.Cryptography名称空间中使用HashAlgorithm抽象类的任何实现来计算散列-当前最佳选择可能是SHA-2 algorithms之一。

您存储哈希而不是密码,并比较哈希值以验证用户身份。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2005054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档