如何使用秘密密钥在swift 4中哈希sha256?

Ash*_*ing 0 hash sha256 swift

我目前正在开发一个项目(速度为3/4),在该项目中,我需要哈希格式如下的HTTP请求:

    {"request": {"method": "getMyPeople", 
    "params": {"api_key": 00de5089d590e413807343166da22a45,
    "user_id": 8 }, "id": "1"}}
Run Code Online (Sandbox Code Playgroud)

我试图散列SHA-256用密钥,一些看起来是这样的:

    6b107c7ebebf056e1c45924d0546d35e
Run Code Online (Sandbox Code Playgroud)

我需要的:

  1. 我需要能够散列用密钥SHA256。
  2. 我需要一个散列请求是十六进制形式的字符串为了让我对数据库的请求

是)我有的:

  1. 设置我的头桥文件以使用Objective-C代码
  2. 调查了许多解决方案,但没有一个对我有用

我尝试过的解决方案: 我最近的尝试是Zaph的帖子(/sf/answers/2747494431/)。

当我的问题时: 我的问题似乎发生时,我尝试的形式转化

 hashSHA256: <aabc766b 6b357564 e41f4f91 2d494bcc bfa16924 b574abbd ba9e3e9d a0c8920a>
Run Code Online (Sandbox Code Playgroud)

在Zaph的帖子看到,他们把它以这种形式,我需要它在十六进制字符串的形式。

如果有人需要进一步澄清,请告诉我。预先感谢您的帮助!

sun*_*nce 7

我承认将所有内容整合在一起可能会令人困惑,但是最终的解决方案非常简单:

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.map { String(format: "%02hhx", $0) }.joined()
    }

}
Run Code Online (Sandbox Code Playgroud)

例:

let result = "test".hmac(key: "test")
Run Code Online (Sandbox Code Playgroud)

结果:

88cd2108b5347d973cf39cdf9053d7dd42704876d8c9a9bd8e2d168259d3ddf7
Run Code Online (Sandbox Code Playgroud)