繁体   English   中英

pbkdf2_sha256 C# 实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM