加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 如何在Vapor 3中处理密码哈希?

发布时间:2020-12-14 04:25:36 所属栏目:百科 来源:网络整理
导读:我正在构建一个基本的身份验证设置,类似于在Vapor的auth-template模板中使用它(从 here开始).我将所有内容设置为与模板中相同的方式. 但是,我想加盐.我可以在创建时为用户生成一个salt: static func create(_ req: Request,newUserRequest user: CreateUser
我正在构建一个基本的身份验证设置,类似于在Vapor的auth-template模板中使用它(从 here开始).我将所有内容设置为与模板中相同的方式.

但是,我想加盐.我可以在创建时为用户生成一个salt:

static func create(_ req: Request,newUserRequest user: CreateUserRequest) throws -> Future<User.Public> {
    return User.query(on: req).filter(.username == user.username).first().flatMap { existingUser in
        guard existingUser == nil else {
            throw Abort(.badRequest,reason: "A user with the given username already exists.")
        }

        guard user.password == user.passwordVerification else {
            throw Abort(.badRequest,reason: "Given passwords did not match.")
        }

        let count = 16
        var pw_salt_data = Data(count: count)
        let _ = pw_salt_data.withUnsafeMutableBytes { mutableBytes in
            SecRandomCopyBytes(kSecRandomDefault,count,mutableBytes)
        }
        let pw_salt = try BCrypt.hash(pw_salt_data.base64EncodedString())

        let pw_hash = try BCrypt.hash(pw_salt + user.password)

        return User(id: nil,username: user.username,pw_hash: pw_hash,pw_salt: pw_salt,email: user.email).save(on: req).toPublic()
    }
}

但是在登录期间执行身份验证时无法检索该盐:

static func login(_ req: Request) throws -> Future<UserToken> {
    let user = try req.requireAuthenticated(User.self)
    let token = try UserToken.create(userID: user.requireID())
    return token.save(on: req)
}

我希望为每个用户随机生成salt,并将其作为与散列密码分开的列存储在数据库中,以便稍后在身份验证期间使用.

有没有一种标准化的方法来处理在Vapor 3中腌制密码哈希?

解决方法

它在Vapor中的工作方式是每个BCrypt哈希都有一个唯一的盐,它与数据库中的密码一起保存. Vapor中的BCrypt默认功能期待这一点.

如果你想沿着不同的路线走下去,看一下哈希密码的函数 – 这需要一个盐.然后,您可以将其保存在自己的字段中,并在验证密码时进行检索.老实说,我会说只是使用默认值,除非你有一个非常具体的理由不这样做

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读