【发布时间】:2019-12-20 22:45:36
【问题描述】:
所以我要为 HMAC-SHA1 生成此代码
let key = "foo".toSHA1()
let data = "bar"
var results = [CUnsignedChar](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), key, key.count, data, data.count, &results)
let hmacData:NSData = NSData(bytes: results, length: (Int(CC_SHA1_DIGEST_LENGTH)))
var bytes = [UInt8](repeating: 0, count: hmacData.length)
hmacData.getBytes(&bytes, length: hmacData.length)
var hexString = ""
for byte in bytes {
hexString += String(format:"%02hhx", UInt8(byte))
}
print(hexString)
以及将密钥字符串转换为 SHA1 的代码
func toSHA1() -> String {
let data = self.data(using: String.Encoding.utf8)!
var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA1($0, CC_LONG(data.count), &digest)
}
let hexBytes = digest.map { String(format: "%02x", $0) }
return hexBytes.joined()
}
结果是
faa3c04b058d38cecf1243421a596742a6cf1188
所以使用这个onlineHMAC Generator 输出相同的结果。但我想要的输出应该是
38b24d28d64f2459d42d1ecd1c9fa375ffeb369f
我可以通过在我提供的页面中将 Key 类型更改为 HEX 来实现。
所以我现在的问题是如何在我的代码中获得相同的输出?我需要将 key 转换为十六进制吗?
【问题讨论】: