繁体   English   中英

C#加密密码

[英]C# Encrypted Password

我为用户提供了一个密码字段,该字段在保存到数据库时会被加密。

另外,如果我去编辑用户,密码字段将被散列。

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

有没有办法显示也许只是8个字符呢?

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

加密

您不能单独更改密码吗?在“编辑用户密码”字段中显示诸如********* 并且,如果在用户编辑期间您在密码字段中输入了一些新内容 ,然后通过加密再次进行。

这里让我担心的是几件事,其中之一是,正如RB在评论中指出的那样,您正在互换使用术语“加密”和“哈希”。 区别非常重要。 简单来说,

  • 加密是指您以某种可以逆转的方式遮盖某些东西。 有一个例子(请记住,这是一个不好的例子)是用数字1代替字母A,用数字2代替字母B,依此类推。 “ Hello”将变成“ 7 5 12 12 15”,对于没有钥匙的人来说,这看起来毫无意义,但如果您知道怎么做,则可以逆转。
  • 散列是一种单向数学函数,它接受输入并将其转换为看似无意义的独特输出。 简而言之,您几乎可以假设进入哈希的每个唯一信息都将作为唯一值出现。 但是,给定唯一的输出,就没有办法将其反转并发现输入是什么。

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

我还敦促您找出有关加盐密码的信息(有关更多信息,请参阅Wikipedia) ,这几乎是当今必不可少的。

现在,讨论您的实际问题。 再次(并且我希望RB不要介意我对他的出色评论进行扩展),您在密码字段( * ** )中看到的内容只是浏览器掩盖您的密码而不会被撬开的一种方式。 它看起来像星星的事实并不能保证其安全。 此外,您应该只从该输入字段中读取内容。 你永远不要写它。 在密码字段中写入任何内容,可使攻击者知道有关您使用的是哪种哈希或安全性的信息。

最好的办法是将用户编辑屏幕上的密码字段保留为空白。 如果MVC为您自动填充了它,那么它向我建议您应该将输入框的名称更改为与基础对象无关的名称。 有关MVC安全性的更多信息,请访问Microsoft的asp.net网站

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM