【发布时间】:2017-02-28 07:42:09
【问题描述】:
我正在开发一个需要与现有 Symfony 安装配合使用的 API。 API 是使用 Perfect 用 Swift 编写的。
我已经确定 Symfony 使用 FOS 用户包和 MessageDigest 编码器(又名 SHA 512 散列)。
查看源代码,我可以看到 FOS 生成随机字节盐。 我可以看到这个盐值(32 个字符长的十六进制字符串)存储在数据库的用户表中。
然后我继续使用 Swift 实现了我在以下链接中看到的编码过程(注意,我包括从数据库中获取的硬编码盐值和匹配的密码)。
MessageDigestPasswordEncoder.php
@IBAction func calculate(_ id: AnyObject?) {
let raw = "1234"
let salt = "6bf3brej22cc8g0go04ck44g0co484c"
let salted = "\(raw){\(salt)}"
var digestData = salted.data(using: String.Encoding.utf8)?.sha512()
var digest = digestData!.toHexString()
for _ in 0..<5000 {
digestData = "\(digest)\(salted)".data(using: String.Encoding.utf8)?.sha512()
digest = digestData!.toHexString()
}
let encodedPass = digestData!.base64EncodedString()
NSLog("encodedPass: \(encodedPass)")
}
不幸的是,我得到的结果与存储在数据库中的编码字符串不是同一个字符串。
我在我的代码中找不到任何错误,除非 FOS 没有使用存储在数据库中的完全相同的盐字符串。
感谢 FOS / Symfony 用户对我做错了什么或如何调试它的任何帮助。
【问题讨论】:
标签: php swift symfony fosuserbundle perfect