.net实现的bcrypt,实现了HashAlgorithm?

| 我希望在我的身份验证库中允许bcrypt支持。现在的问题之一是,我假设哈希器的类型将是“ 0”。 Bcrypt.net不实现此类。另外,它是密封的,因此我必须根据它自己创建一个分支并自己对其进行修改。有没有更好的替代方案已经实现了HashAlgorithm?     
已邀请:
尝试这个:
public class BCryptHasher : HashAlgorithm
{
    private MemoryStream passwordStream = null;

    protected override void HashCore(byte[] array, int ibStart, int cbSize)
    {
        if (passwordStream == null || Salt == null)
            Initialize();

        passwordStream.Write(array, ibStart, cbSize);
    }

    protected override byte[] HashFinal()
    {
        passwordStream.Flush();

        // Get the hash
        return Encoding.UTF8.GetBytes(BCrypt.Net.BCrypt.HashPassword(Encoding.UTF8.GetString(passwordStream.ToArray()), Salt));            
    }

    public override void Initialize()
    {
        passwordStream = new MemoryStream();

        // Set up salt
        if (Salt == null)
        {
            if (WorkFactor == 0)
                Salt = BCrypt.Net.BCrypt.GenerateSalt();
            else
                Salt = BCrypt.Net.BCrypt.GenerateSalt(WorkFactor);
        }
    }

    public int WorkFactor { get; set; }

    public string Salt { get; set; }

    public bool Verify(string plain, string hash)
    {
        return BCrypt.Net.BCrypt.Verify(plain, hash);
    }
}
用法:
BCryptHasher hasher = new BCryptHasher();
string pw = \"abc\";
string hash = Encoding.UTF8.GetString(hasher.ComputeHash(Encoding.UTF8.GetBytes(pw)));
另外,我添加了一个辅助方法Verify方法,以便您可以验证密码和哈希值是否匹配,但是如果您仅调用默认的BCrypt.Verify,则可以消除此问题。
bool matches = hasher.Verify(pw, hash);
我添加了一些额外的属性,因此您可以在进行哈希处理之前传入预先计算的盐或工作因子以生成新的盐:
string pw = \"abc\";
hasher.Salt = \"$2a$06$If6bvum7DFjUnE9p2uDeDu\";
string hash = Encoding.UTF8.GetString(hasher.ComputeHash(Encoding.UTF8.GetBytes(pw)));
我用BCrypt测试用例“ abc \”加上\“ $ 2a $ 06 $ If6bvum7DFjUnE9p2uDeDu \”的盐进行了尝试,并得到了正确的哈希值。     

要回复问题请先登录注册