简体   繁体   English

带有 CryptoKit 的 Swift 5 中的 HMAC 256 签名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM