【问题标题】:Using Bcrypt with ServiceStack将 Bcrypt 与 ServiceStack 一起使用
【发布时间】:2012-10-10 18:52:45
【问题描述】:

我希望将 ServiceStack 用于即将进行的项目,但我想使用 bcrypt 来散列密码。目前内置存储库使用 SHA256 散列。我有什么办法可以利用现有的身份验证代码并改用 bcrypt 吗?

【问题讨论】:

    标签: authentication servicestack bcrypt


    【解决方案1】:

    在此澄清ServiceStack's Auth Provider 中的密码哈希仅用于存储用户名/密码的身份验证提供程序,即凭据/基本/摘要身份验证提供程序。

    不幸的是,散列提供程序不容易交换,因为它在每个不同的 UserAuthRepo 提供程序的一些地方使用,请参阅OrmLiteAuthRepository 中的SaltedHash()RedisAuthRepository

    如果您可以提出一个共享接口,该接口既可以与 ServiceStack 当前使用的 SHA256 SaltedHash 一起使用,也可以与 bcrypt 一起使用,我可以重构它以使哈希提供程序可覆盖。即是否可以使 bcrypt 哈希提供程序与此接口一起使用?

    public interface IHashProvider {
        void GetHashAndSalt(byte[] Data, out byte[] Hash, out byte[] Salt);
        void GetHashAndSaltString(string Data, out string Hash, out string Salt);
        bool VerifyHash(byte[] Data, byte[] Hash, byte[] Salt);
        bool VerifyHashString(string Data, string Hash, string Salt);
    }
    

    要不然有什么可以同时适用的吗?

    【讨论】:

    • 这回答了这个问题。我会看看我是否可以获得一个适合该接口的 bcrypt 提供程序。可能有点棘手,因为 bcrypt 也有一个工作因子。
    • 需要类似的东西,但我建议不要在 .Net 中使用 BCrypt(请参阅Link。我有一个使用 Pbkdf2 和 HMAC 签名的实现。出于这个和其他原因,我必须实现我自己的 UserAuthRepository。作为对于工作因素、站点密钥等,我有一个设置类,它被注入到我的加密服务中。如果你能进一步了解接口,一旦我支持测试,我很乐意分享我的实现。
    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多