gpt4 book ai didi

.net - 在 .NET 中使用 PBKDF2 和 HKDF 进行密码哈希处理

转载 作者:行者123 更新时间:2023-12-02 06:16:49 28 4
gpt4 key购买 nike

我的任务是编写一种计算密码哈希值的新方法来替换我们认为还不够安全的旧方法。不久前,我读了《Security Driven .NET》一书,其中我了解到重要的部分是使用可配置转数的算法(而不是简单的哈希),而在.NET中推荐的算法是称为PBKDF2用于密码处理。我还读到,作为 ASP.NET 处理密码方式的改进,如果存储在数据库中的结果哈希通过使用 PBKDF2 创建主数据库以加密方式与用户(名称或 ID)相关联,那就太好了key,然后使用用户名(或 id)使用 HKDF 创建派生 key 。但同样,这是我从一本我目前无法接触到的书上读到的肤浅知识,所以我无法重新检查我的内存是否正确。

此外,我以前没有使用过 .NET DerivedBytes API,所以我可能做错了。所以我的问题是:我在下面的代码中做的事情正确吗?我是否正确使用 API?这个实现“足够安全”吗?或者我做错了什么,完全消除了所有安全性?

protected override byte[] ComputeHash(string user, string salt, string password)
{
var userBytes = user.ToBytes();

using (var pbkdf2 = new PBKDF2(MacFactories.HMACSHA512, password.ToBytes(), salt.ToBytes()))
{
var masterKey = pbkdf2.GetBytes(128);
using (var hkdf = new HKDF(MacFactories.HMACSHA512, masterKey, userBytes, userBytes))
{
return hkdf.GetBytes(64);
}
}
}

最佳答案

你有正确的想法/方法 - 这是一个稍微好一点的实现:

byte[] ComputeHash(string user, string salt, string password)
{
using (var pbkdf2 = new PBKDF2(HMACFactories.HMACSHA512, password, salt.ToBytes()))
using (var hkdf = new HKDF(HMACFactories.HMACSHA512, pbkdf2.GetBytes(64), user.ToBytes()))
return hkdf.GetBytes(64);
}

您不应要求 pbkdf2 提供比底层 PRF 的字节长度更多的字节(在您的情况下,SHA512 会生成 64 个字节)。

您可以将 hkdf 上下文保留为 null,因为您似乎不需要它。

对于其他可能想知道上面代码使用什么库的人 - Inferno crypto .

关于.net - 在 .NET 中使用 PBKDF2 和 HKDF 进行密码哈希处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38519807/

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