.NET中密码的重复哈希方法

时间:2015-01-23 作者:Pablo Oliva

我们通过WP 4.1管理产品的销售、订阅和客户档案/账户。这些订阅是对单独服务器上的产品的订阅。网客户在WP端进行购买后,我们希望将客户帐户详细信息(即用户名、密码等)推送到。NET应用程序和这些凭据将用于登录。NET应用程序。我遇到的挑战是如何在上复制。NET端与WP中使用的哈希方法相同。我知道WP使用PHPass(http://www.openwall.com/phpass/) 来散列密码,但没有可用于的库。网

几个问题:

有没有“简单”的解决方案,可以在上复制哈希方法。净侧?

安全认证盐是用于生成密码哈希的盐吗?我们启用了SSL。

一个可能的解决方案是使用salt将WP端的哈希方法“降级”为一个简单的MD5哈希,然后我可以在上轻松复制该方法。NET端,并按此处所述完成How can I change the default wordpress password hashing system to something custom? 对此有何想法?

3 个回复
SO网友:maxkoryukov

这是图书馆:http://www.zer7.com/software/cryptsharp

这是“howtouse”:

    public override bool ValidateUser(string name, string password)
    {
        if (string.IsNullOrWhiteSpace(name))
            return false;
        if (string.IsNullOrWhiteSpace(password))
            return false;

        // this is just fetching the hash from the WP-database using BLToolkit. You can use any other way to get the hash from db ;)
        UserData ud = null;
        using (Db db = new Db())
        {
            db.SetCommand(@"SELECT id, user_pass FROM wp_users WHERE user_login=@user_login AND user_status=0",
                db.Parameter("user_login", name)
            );

            ud = db.ExecuteObject<UserData>();

        }

        if (null == ud)
            return false;
        // !!!! HERE IS CHECKING !!!
        // LIB USAGE:
        return CryptSharp.PhpassCrypter.CheckPassword(password, ud.user_pass);
    }
此代码是自定义MembershipProvider的一部分。

SO网友:skjoshi

我的情况也与OP相似,我一直在使用@AndrewBartel提供的参考中的解决方案。此解决方案针对phpBB。

我正在解释哈希密码的格式(Taken from here):

(密码的)哈希示例如下$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1. phpass可移植哈希字符串的格式为$P$RoundsSaltChecksum, 其中:

  • $P$ 是用于标识phpass哈希的前缀,遵循模块化Crypt格式。轮数是一个单字符编码的6位整数,表示使用的轮数。这是对数,实际的轮数是2^轮。(在本例中,轮数编码为8或2**13次迭代)。

    salt是从[./0-9A-Za-z], 提供48位盐(ohUJ.1sd 在示例中)。

    校验和是从同一集中抽取的22个字符,对128位校验和进行编码(Fw09/bMaAQPTGDNi2BIUt1 在示例中)。

    如注释部分所述:

    请注意,phpBB3数据库使用备用前缀$H$,这两个前缀都可以被此实现识别,并且校验和是相同的。

    因此,前缀不会影响哈希的校验和。@pdaddy所做的更改只是更改前缀以匹配Wordpress使用的前缀(与PhPass中使用的前缀相同)。这里需要注意的一点是,Wordpress还支持这两个前缀,如code here. 因此,如果您想同时支持phpBB和Wordpress前缀,可以在中更改第三行hashCryptPrivate 功能为

    if ((!genSalt.StartsWith("$P$")) && (!genSalt.StartsWith("$H$"))) return output;
    
    现在phpbbCheckHash 函数应该能够匹配Wordpress和phpBB哈希中的密码。

SO网友:Fütemire

对于VB。Net用户,简单地用转换器将CSharp代码转换为VB是行不通的。我认为这与右移方式的不同有关>> 与VB相比,操作符在CSharp中工作,但我并不是百分之百支持这一点。我只知道这行不通。所以我所做的是创建一个CSharp类库,我在VB项目中引用它。

结束