[英]pbkdf2_sha256 C# implementation
我有一个数据库,其中密码存储为 pbkdf2_sha256。 我想创建一个应该创建新密码的工具(在 C# 中)。
我的问题是:如何在 C# 中加密密码? 我找到了一个对我有用的Java 类,但我不能在 C# 中使用这个示例。 有没有类似的方法?
我也尝试过其他课程,但它们似乎不起作用。
编辑:我为 C# 找到了这个类。 但是当我调用ValidatePassword
-Method 时,它返回 false。 (密码和哈希是正确的)。
EDIT2:我也发现了 这个C# 类,但它似乎不起作用。 我做错了什么?
这是我使用的代码:
var salt = "FbSnXHPo12gb";
var password = "geheim";
var interactions = 12000;
using (var hmac = new HMACSHA256())
{
var df = new Pbkdf2(hmac, password, salt, interactions);
Console.WriteLine(BitConverter.ToString(df.GetBytes(32)));
Console.WriteLine(String.ByteArrayToString(df.GetBytes(32)));
Console.WriteLine(UTF8Encoding.UTF8.GetString(df.GetBytes(32)));
Console.WriteLine(Convert.ToBase64String(df.GetBytes(32)));
}
//hash I should get:
//pbkdf2_sha256$12000$FbSnXHPo12gb$LEpQrzPJXMI0m3tQuIE5mknqCv1GWgT5X2rWyLHN0Xk=
//hash I get:
//Rc8oMeSrbWyIJ+aXvGegFowKcIlwk8eIRyxXUf/a+t0=
不要将十六进制输出转换为 base-64 字符串,而是直接将字节转换为它。 还要注意,您将在每个 df.GetBytes 调用中获得新字节。 等效的示例是:
var salt = "FbSnXHPo12gb";
var password = "geheim";
var interactions = 12000;
using (var hmac = new HMACSHA256())
{
var df = new Pbkdf2(hmac, password, salt, interactions);
Console.WriteLine(Convert.ToBase64String(df.GetBytes(32)));
}
//hash I should get:
//pbkdf2_sha256$12000$FbSnXHPo12gb$LEpQrzPJXMI0m3tQuIE5mknqCv1GWgT5X2rWyLHN0Xk=
//hash I get:
//LEpQrzPJXMI0m3tQuIE5mknqCv1GWgT5X2rWyLHN0Xk=
请注意,Java 类有一个标头(“pbkdf2_sha256$12000$FbSnXHPo12gb$”),而 C# 类只返回哈希值。
我在我的 Github 存储库中有一个Jither 的 PBKDF2 C# DeriveBytes 代码的分支,包括一个 PBKDF2-HMAC-SHA-256 变体、大量测试向量和一个既可以生成哈希值又可以检查结果的接口,如果该示例有帮助的话你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.