[英]HMAC 256 Signature in Swift 5 with CryptoKit
What is the most updated way to get a HMAC 256 signature using CryptoKit and Swift 5?使用 CryptoKit 和 Swift 5 获取 HMAC 256 签名的最新方法是什么? After trying different methods mentioned on HMAC SHA256 in Swift 4 and Implementing HMAC and SHA1 encryption in swift I still haven't been able to make the API request work.
在尝试了 Swift 4 中 HMAC SHA256 中提到的不同方法并在 swift 中实施 HMAC 和 SHA1 加密之后,我仍然无法使 ZDB974238714CA8DE634A7CE1D083A14F 请求工作。 These two methods give me a different signature:
这两种方法给了我不同的签名:
Using CryptoKit使用 CryptoKit
import CryptoKit
let urlWithoutSignature = "https://api.binance.com/sapi/v1/capital/config/getall?timestamp=\(timeStamp)"
let secretString = "p23842nll3vc8vdfnsddfiupsd8cvsnlsdfs"
let key = SymmetricKey(data: secretString.data(using: .utf8)!)
let signature = HMAC<SHA256>.authenticationCode(for: urlWithoutSignature.data(using: .utf8)!, using: key)
let signatureString = Data(signature).map { String(format: "%02hhx", $0) }.joined()
Using a string extension使用字符串扩展
import CommonCrypto
let signatureString = urlWithoutSignature.hmac(key: secretString))
extension String {
func hmac(key: String) -> String {
var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), key, key.count, self, self.count, &digest)
let data = Data(bytes: digest)
return data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
}
}
How can I check that the signatures are correct?如何检查签名是否正确? I can't compare them with the Postman one because the timestamp is always different.
我无法将它们与 Postman 进行比较,因为时间戳总是不同的。
The API docs API 文档
let signatureString = Data(signature).base64EncodedString()让 signatureString = Data(signature).base64EncodedString()
is equal to CommonCrypto's signatureString.等于 CommonCrypto 的签名字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.