我们正在研究一些可以将两个独立源(Pyhton Django应用程序和ASP.NET应用程序)的凭据迁移到单个凭证存储区的选项/方案。迁移有多种方式,其中一种方法如下:将所有密码哈希复制到单个存储中,并根据额外的属性选择验证方法。C#中用于迁移密码哈希的Python pbkdf2用法相当于什么
所以现在我基本上试图在C#控制台应用程序中验证在Python Django中生成的密码哈希。
,我发现了一些资源,如: https://docs.djangoproject.com/en/1.10/_modules/django/contrib/auth/hashers/
和
https://docs.djangoproject.com/en/1.10/_modules/django/contrib/auth/hashers/pbkdf2
但我有翻译逻辑到C#的困难。我认为主要是因为我的密码学技能还不够。
我希望有人能指出我正确的方向。
更新1:
我用下面的Python Django的密码哈希测试:
pbkdf2_sha256$20000$T4FXlMzy8zRE$X0hjGqgGYAOmBQSFoOBf/8nMLzGsK6STt8kE3meg6bM=
public bool VerifyPassword(string password, string hashedPassword, string salt)
{
// Password: <test phrase>
// HashedPassword: X0hjGqgGYAOmBQSFoOBf/8nMLzGsK6STt8kE3meg6bM=
// salt: T4FXlMzy8zRE
int iterationCount = 20000;
byte[] src = Convert.FromBase64String(hashedPassword);
byte[] inputPwHash;
using (var bytes = new Rfc2898DeriveBytes(password, salt, iterationCount))
{
inputPwHash = bytes.GetBytes(32);
}
var result = SlowEquals(src, inputPwHash);
return result;
}
我已经试过是创造了HMACSHA256摘要定制PBKDF2执行。
public class Rfc2898DeriveBytes : DeriveBytes, IDisposable
{
public Rfc2898DeriveBytes(Byte[] password, Byte[] salt, Int32 iterations)
{
_hmacsha256Obj = new HMACSHA256(password);
hLen = _hmacsha256Obj.HashSize/8;
_passwordBytes = password;
_saltBytes = salt;
_iterationCount = iterations;
}
}
我会通过以下方式匹配hashresult:
public bool VerifyPassword(string password, string hashedPassword, string salt)
{
int iterationCount = 20000;
byte[] src = Convert.FromBase64String(hashedPassword);
byte[] inputPwHash;
using (var bytes = new Rfc2898DeriveBytes(password, salt, iterationCount))
{
inputPwHash = bytes.GetBytes(32);
}
var result = SlowEquals(src, inputPwHash);
return result;
}
但是哈希结果是不一样的。我需要使用文本编码做些什么吗?