2017-04-06 30 views
-1

我们正在研究一些可以将两个独立源(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; 
    } 

但是哈希结果是不一样的。我需要使用文本编码做些什么吗?

回答