c# - 我如何在我的 ASP.Net 应用程序上使用 salting+hashing?

标签 c# sql-server hash salt

我正在从头开始构建一个项目,我想以正确的方式做事™。我在网上阅读过有关哈希的内容,这基本上是将密码变成 64 个胡言乱语的字母,对吗?

加盐怎么样?

我的问题是:

  1. 如何使用 C# 对字符串进行哈希处理?
  2. MSSQL 中的字段声明类型是什么? nvarchar(64)?
  3. 什么是加盐,我需要将其保存在数据库中的某个位置吗?
  4. 如果我打算让人们使用 Facebook Connect,我是否需要担心创建哈希/salt?

代码示例优先。谢谢!

最佳答案

我将跳过问题 1,因为我不是 C# 人员。

问题三:

加盐是在散列之前将一串随机数据添加到密码中。盐是必不可少的,因为没有它们,攻击者就有可能预先生成 rainbow table。已知密码哈希值。加盐意味着彩虹表不能被预先构建,这意味着每个密码必须单独被暴力破解。

为每个密码生成一个新盐很重要。

盐值不是 secret 的,可以与哈希密码一起存储在您的数据库中。

生成和检查密码的伪代码如下:

generatePassword(String user, String password) {
    String salt = generateRandomSalt();
    String salted = salt + password;
    String hash = hexEncode(hash(salted));
    store(user, hash, salt);
}

checkPassword(String user, String testPassword) {
    String salt = lookupSalt(user);
    String salted = salt + testPassword;
    String testHash = hexEncode(hash(salted));
    return testHash.equals(lookupHash(user));
}

问题二:

数据库字段的长度取决于哈希算法。 SHA1 生成 160 位输出,因此如果采用十六进制编码,则为 40 个字符。一个好的经验法则是使用与哈希输出大小相同的盐,因此您将有两个 40 个字符的列:一个用于盐,一个用于哈希。

问题 4:

抱歉,不知道 Facebook Connect 是如何工作的。我希望其他两个答案对您有所帮助。

关于c# - 我如何在我的 ASP.Net 应用程序上使用 salting+hashing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404253/

相关文章:

c# - 如何将值从存储过程返回到 EF

c# - 如何减少我的代码,几乎相同的结构数量可能非常多

c# - 如何防止 Xamarin.Forms.Entry 键盘在按下按钮时失去焦点

java - 合并多个 SQL 表

sql - 将 postgres 函数的结果作为参数返回给 SQL 存储过程

algorithm - hash中什么是主次聚类?

c#,Microsoft Interop Excel,更改所选范围的字体样式

sql-server - 返回第 n 个字符之前的所有内容或第 n 个字符之前的最后一个空格

python - 具有哈希表空间的循环双向链表

c# - 为什么杂音比内置的 MD5/SHA1 方法慢