C#中的散列密码创建盐的问题

如果我创建盐通过使用这样的事情:

public class User { private const int Hash_Salt_Length = 8; private byte[] saltBytes = new byte[Hash_Salt_Length]; public User() { RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetNonZeroBytes(saltBytes); } .... }

saltBytes字节数组将为每个会话(重新启动应用程序)的不同。 如何检查密码,以允许用户登录我们的应用程序?

--------------解决方案-------------

您需要存储盐在数据库中,随着密码哈希。

请注意,你不应该叫GetNonZeroBytes因为这提供较少的随机性。

如果盐的每个应用程序重启时间的变化,你必须将其存储在数据库中(在用户记录)。

盐是当你创建你的用户记录您生成一个静态的东西,你保存它连同用户ID和口令+盐的哈希值。

当用户试图登录,您使用的ID来查找盐,再加上他们的密​​码哈希并比较存储的哈希值。 如果它们匹配,他们研究。

盐的存在,使访问您的安全数据库攻击者无法事先准备密码数据库 - >哈希映射,然后进行简单的反向查找,尝试确定密码。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#,安全散列
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.398 (s). 10 q(s)