加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 这是一种散列密码的安全方法吗?

发布时间:2020-12-15 07:57:35 所属栏目:百科 来源:网络整理
导读:您能告诉我以下是否是安全地散列密码以存储在数据库中的好方法: public string CreateStrongHash(string textToHash) { byte[] salt =System.Text.Encoding.ASCII.GetBytes("TeStSaLt"); Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(textToHash,salt,1
您能告诉我以下是否是安全地散列密码以存储在数据库中的好方法:
public string CreateStrongHash(string textToHash) {

        byte[] salt =System.Text.Encoding.ASCII.GetBytes("TeStSaLt");

        Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(textToHash,salt,1000);
        var encryptor = SHA512.Create();
        var hash = encryptor.ComputeHash(k1.GetBytes(16));

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hash.Length; i++) {
            sb.Append(hash[i].ToString("x2"));
        }

        return sb.ToString();

    }

提前谢谢了.

解决方法

你使用PBKDF2-SHA1,这是体面但不是很好. Bcrypt好一点,scrypt更强.但由于.net已经内置了PBKDF2实现,这是一个可以接受的选择.

你最大的错误就是你没有得到盐.每个用户的盐应该是唯一的.简单地创建至少64位的随机值是标准做法.将它与散列一起存储在数据库中.

如果您愿意,可以将盐分成两部分.一个与用户一起存储在数据库中,每个用户都不同,一个共享部分存储在别处.这获得了两者的优点.

我还建议使用比1000更高的工作因子.找出可接受的性能,并进行相应调整.我不会低于10000,在某些情况下(磁盘加密)也可以接受一百万.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读