gpt4 book ai didi

c# - 密码哈希 - 为什么加盐 60,000 次

转载 作者:太空狗 更新时间:2023-10-29 22:15:44 27 4
gpt4 key购买 nike

我在一家财富 100 强公司工作,我的任务是将安全性从 SHA1 转移到 SHA-2。这不是我的专业领域,但在我学习密码学时,我正在质疑过时的信息等......

  1. SHA-2 显然比 SHA-1 更需要,但是当安全团队知道密码 + salt 的散列使用的是 SHA,GPU 在破解数十亿散列时速度快得离谱 - 我不明白为什么对于密码,我没有被告知使用 bcrypt 或其他速度较慢的等效项,为什么?

  2. 有人向我展示了一张 powerpoint 幻灯片,其中告诉我制作盐 60,000 次。我在整个互联网上进行了搜索,但没有看到任何此类建议或示例。为什么?

我正在使用 C#

string SaltAndPwd = string.Concat(plainTextPassword, salt);
SHA256 sha2 = SHA256Managed.Create();
byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));

我想我不是被告知要一遍又一遍地创建盐,而是一遍又一遍地创建哈希。

这个逻辑合适吗?

string plainTextPassword = "aF7Cvs+QzZKM=4!";  
string salt = "o9kc5FvhWQU==";
SHA256 sha2 = SHA256Managed.Create();

for(var i = 0; i <= 60000; i++)
{
byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));
}

如何使此哈希正常工作?

更新发现powerpoint幻灯片

enter image description here

代码更新 - 哈希验证的实现问题

问题是当我对我正在尝试的代码使用检查时if (resultHash.Equals(hassPassword)) 并且不匹配...

    public string BuildVerify()
{

string password = "";
string salt = "";
byte[] result;


using (var sha256 = SHA256.Create())
{
password = "hovercraft";

// step 1: you can use RNGCryptoServiceProvider for something worth using
var passwordHashing = new PasswordHashing();
salt = passwordHashing.CreateRandomSalt();

// step 2
string hash =
Convert.ToBase64String(sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + password)));

// step 3
result = sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + hash));

// step 4
for (int i = 0; i < 60000; i++)
{
result =
sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + Convert.ToBase64String(result)));
}
}


// TESTING VERIFY this works ..

string SaltAndPwd = string.Concat(password, salt);
SHA256 sha2 = SHA256Managed.Create();
byte[] buff = sha2.ComputeHash(Encoding.Unicode.GetBytes(SaltAndPwd));
string resultHash = Convert.ToBase64String(buff);
string hassPassword = Convert.ToBase64String(result);

if (resultHash.Equals(hassPassword))
{
// perfect
}




return "";

}


public class PasswordHashing
{

public string CreateRandomSalt()
{
string password = "";
password = HashPassword.CreateSalt(8) + "=";
password = password.Replace("/", "c");
return password;
}

}

///

    public static string CreateSalt(int size)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

byte[] buff = new byte[size];
rng.GetBytes(buff);
return Convert.ToBase64String(buff);
}

新问题 我想我会继续提出一个新问题,在此先感谢大家。 Verification of Hashing password is not working

最佳答案

I do not get why for passwords i'm not being told to use bcrypt or another equivalent that is slow

我猜这就是为什么他们要你哈希 60000 次。添加工作因素并减缓暴力攻击。

How do I make this hashing to work properly?

像这样:

using (var sha256 = SHA256.Create())
{
string password = "hovercraft";

// step 1: you can use RNGCryptoServiceProvider for something worth using
string salt = GenerateSalt();

// step 2
string hash =
Convert.ToBase64String(sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + password)));

// step 3
byte[] result = sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + hash));

// step 4
for (int i = 0; i < 60000; i++)
{
result =
sha256.ComputeHash(Encoding.UTF8.GetBytes(salt + Convert.ToBase64String(result)));
}
}

关于c# - 密码哈希 - 为什么加盐 60,000 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37342435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com