但是,我想加盐.我可以在创建时为用户生成一个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默认功能期待这一点.如果你想沿着不同的路线走下去,看一下哈希密码的函数 – 这需要一个盐.然后,您可以将其保存在自己的字段中,并在验证密码时进行检索.老实说,我会说只是使用默认值,除非你有一个非常具体的理由不这样做
总结以上是内存溢出为你收集整理的swift – 如何在Vapor 3中处理密码哈希?全部内容,希望文章能够帮你解决swift – 如何在Vapor 3中处理密码哈希?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)