Вы хэшируете пароль, используя BCrypt. BCrypt уже является частью зависимостей Vapor.
BCrypt.hash("vapor", cost: 4)
Это будет хэшировать строку «пар», используя случайно сгенерированную соль, со сложностью 4. Выбор стоимости субъективен и произвольн, но рекомендуется, чтобы реальные безопасные приложения имели коэффициент затрат выше 10-12. Если вам не нравится, как соль генерируется случайным образом BCrypt, и вы хотите создать свою собственную соль, вы можете указать ее для хеш-функции, которая имеет следующую подпись:
public func hash(_ plaintext: LosslessDataConvertible, cost: Int = 12, salt: LosslessDataConvertible? = nil) throws -> String
Документация гласит, что соль должна быть 16 байтов, если предоставлена вручную.
Это пример хеша:
$2a$04$/nqhWqplnughhq6mlKmi8.raprxoG/dczY8kdbOKm.zC5sPu.2IBi
Как вы видите, она включает вспомогательную информацию, такую как сложность, тип алгоритма и соль, все необходимое для проверки. Если вы предоставили свою собственную соль, она также будет частью окончательного хэша, и вам не нужно отдельно предоставлять ее. Вы можете сделать проверку, как написано ниже.
try BCrypt.verify("vapor", created: hashedPasswordSavedInDatabase)