C#加密密码

时间:2013-02-21 12:55:01

标签: c# asp.net-mvc password-encryption password-hash

我有一个用户的密码字段,当它保存到数据库时,密码是加密的。

此外,如果我去编辑用户,则会对密码字段进行哈希处理。

但由于加密的长度,散列字段长达数百个字符。

有没有办法显示可能只有8个字符?

这是保存后显示的内容,这是不理想的。

encrypt

2 个答案:

答案 0 :(得分:1)

您无法单独选择更改密码,在编辑用户密码字段中显示*********之类的内容。如果在用户编辑期间您在密码字段中输入 new ,则再次通过加密。

答案 1 :(得分:0)

这里有几件令我担心的事情,其中​​之一是,正如RB在评论中指出的那样,你可以互换地使用加密和散列这两个术语。差异非常重要。简单来说,

  • 加密是指您以可以逆转的方式隐藏某些内容。一个例子(一个不好的例子)用字母A代替数字1,字母B代替数字2,依此类推。 “你好”会变成“7 5 12 12 15”,对没有钥匙的人来说看起来毫无意义,但如果你知道如何,那就是可逆的。
  • 散列是一种单向数学函数,它接受输入并将其转换为看似毫无意义的输出的独特部分。简单来说,您几乎可以假设进入哈希的每个唯一信息都将作为唯一值出现。但是,鉴于这种独特的输出,没有办法扭转它并发现输入是什么。

为了进一步扩展上述内容,如果我创建的网站要求用户注册,我会使用他们选择的密码,然后我会将该密码哈希,然后将该密码存储在安全的地方。然后我会丢弃用户实际输入的密码。下次该用户来到我的网站时,他们会输入他们的密码,我会再次哈希,然后我会根据我之前保存的内容检查哈希输出,并且因为相同的单词将始终产生相同的输出,如果这两个哈希匹配我会授予访问我的网站的权限。

我还恳请您了解 salting 密码(more on which can be found at Wikipedia),这些日子几乎是必须的。

现在,谈谈你的实际问题。再次(我希望RB不介意我扩展他的优秀评论)你在密码字段中看到的内容( * ** )只是一种方式浏览器将您的密码隐藏起来。它看起来像星星的事实并不能使它安全。此外,您应该只读取此输入字段。你永远不应该写信给它。在密码字段中写入任何内容都可以让攻击者知道您正在使用哪种哈希或安全性的信息。

您可以做的最好的事情是将用户编辑屏幕上的密码字段留空。如果MVC为您自动填充,那么它告诉我您应该将输入框的名称更改为与您的基础对象无关的内容。有关MVC安全性的更多信息,请参见Microsoft's asp.net website