gpt4 book ai didi

php - 在 Symfony 之外验证 FOS 用户

转载 作者:行者123 更新时间:2023-11-28 06:24:07 24 4
gpt4 key购买 nike

我正在开发一个需要与现有 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 用户对我做错了什么或我如何调试它的任何帮助,我将不胜感激。

最佳答案

因此,我通过导入 CommonCrypto 库找到了解决方案。 (通过自定义 module.modulemap)而不是使用第三方框架进行 SHA512 哈希(我正在使用):

func calculateCommonCrypto() {
let raw = "1234"
let salt = "6bf3brej22cc8g0go04ck44g0co484c"

let salted = "\(raw){\(salt)}"

let saltedData = NSData(data: salted.data(using: String.Encoding.utf8)!)
var digest = [UInt8].init(repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))

CC_SHA512(saltedData.bytes, CC_LONG(saltedData.length), &digest)

var combinedData = NSMutableData()
let saltedBytes = NSData(data: salted.data(using: String.Encoding.utf8)!)

for _ in 1 ..< 5000 {
combinedData.append(&digest, length: digest.count)
combinedData.append(saltedBytes.bytes, length: saltedBytes.length)

CC_SHA512(combinedData.bytes, CC_LONG(combinedData.length), &digest)

combinedData = NSMutableData()
}

let finalData = Data(bytes: digest)

let encodedStr = finalData.base64EncodedString()
}

关于php - 在 Symfony 之外验证 FOS 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42502859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com