c# - 在.net core mvc应用程序上存储用户密码的最佳方式
问题描述
请检查下面的课程。在这里,我正在做密码哈希,然后比较这个密码哈希。现在我的问题是安全存储用户密码是最佳做法吗?请提供建议,您可以在我的课程中添加更好的实现。提前致谢
public class myCrypto
{
public static string MakeHash(string value)
{
return Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(value)));
}
public static bool CompareHash(string plainString, string hashString)
{
if (MakeHash(plainString)==hashString)
{
return true;
}
else
{
return false;
}
}
}
解决方案
有关散列的更多信息,请查看此答案:
但是,在任何情况下都不要存储您的用户密码。只存储盐渍哈希。如果您这样做,即使哈希被黑客发现,它对他们的使用也将受到限制。
如果这样做,您可以相对安全地将它们存储在安全数据库中。确保数据库遵循所有安全最佳实践。
另请查看:将密码存储在数据库中的最佳方式。
请注意,您不会先对密码进行加盐。这是一个严重的安全漏洞,就像黑客发现了您的哈希算法并访问了您保存的哈希值一样,他可以简单地将哈希值与预先哈希过的常用密码进行比较,从而发现大部分用户的密码。
盐是在散列之前添加到密码末尾的随机文本/二进制 blob。这对于每个用户应该是不同的,并与散列一起存储。这样一来,即使是两个拥有相同密码的人也会有不同的哈希值,这让黑客的生活变得更加艰难。
这个答案讨论了在 C# 中加盐密码:Hash and salt passwords in C#。它没有解释盐是如何产生的。它应该是随机的,并且每个用户都不同,但不需要加密安全。System.Random 可能会做得很好。
推荐阅读
- c++ - 使用 C++ 模板进行类型测试
- html - 仅使用 URL 参数设置单选按钮输入的值(不使用 JQuery 或 JavaScript)
- r - 如何将带有数据框的嵌套列表转换为R中的一个数据框
- angular - 如何在 Jhipster 生成的应用程序中包含来自节点模块的 js?
- python - 如何在py_function之后重塑(图像,标签)数据集
- node.js - 可以让事件处理程序等到异步/基于 Promise 的代码完成吗?
- webview - Appcelerator WebView 无法在 iOS 上定位/加载 png 资源
- python - 在numpy中创建特殊结构的nxn矩阵:单位矩阵和相同矩阵的总和向右移动1列
- tensorflow - 如何在 Tensorflow 中使用张量作为字典的键?
- vue.js - 要求放置 :key 时出错
For not having
:key="item.id"
on<template>
, I'm getting this error: