【问题标题】:How to Hash sha256 in swift 4 with a secret key?如何使用密钥在 swift 4 中散列 sha256?
【发布时间】:2018-01-24 00:35:54
【问题描述】:

我目前正在处理一个项目(在 swift 3/4 中),我需要对格式如下的 HTTP 请求进行哈希处理:

    {"request": {"method": "getMyPeople", 
    "params": {"api_key": 00de5089d590e413807343166da22a45,
    "user_id": 8 }, "id": "1"}}

我正在尝试使用密钥在 SHA-256 中进行散列,如下所示:

    6b107c7ebebf056e1c45924d0546d35e

我需要什么:

  1. 我需要能够使用带有密钥的 sha256 进行散列。
  2. 我需要将该哈希请求设为十六进制形式的字符串,以便我向数据库发出请求

我有什么:

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

我尝试过的解决方案: 我最近的尝试是 Zaph 的帖子 (https://stackoverflow.com/a/39249920/8093921)。

我的问题发生在哪里: 当我尝试转换

的形式时,我的问题似乎发生了
 hashSHA256: <aabc766b 6b357564 e41f4f91 2d494bcc bfa16924 b574abbd ba9e3e9d a0c8920a>

如 Zaph 的帖子中所见,他们以这种形式保留它,我需要它以十六进制字符串的形式。

如果有人需要更多说明,请告诉我。 提前感谢您的帮助!

【问题讨论】:

  • 关于[swift] SHA256 的问答有 >100 个 - 您尝试了哪些解决方案,以及它们究竟是如何不起作用的?
  • @MartinR,我的问题似乎是从以十六进制形式获取字符串之后的返回值。我最近的尝试是来自 Zaph 的 stackoverflow.com/questions/39249191/… 的这篇文章。很抱歉没有在我的帖子中解释这一点。
  • 什么“问题”?请显示带有输入、实际输出和预期输出的minimal reproducible example。 – 我们无法猜测您的问题是什么。
  • 我会调查一下,谢谢。对于没有创建可验证的示例,我深表歉意。这是我在 Stack Overflow 上的第一篇文章。

标签: swift hash sha256


【解决方案1】:

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

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()
    }

}

例子:

let result = "test".hmac(key: "test")

结果:

88cd2108b5347d973cf39cdf9053d7dd42704876d8c9a9bd8e2d168259d3ddf7

【讨论】:

  • 知道了!谢谢!
  • 这里是什么“CCHmac”@sundance!请告诉
  • 很简单?
猜你喜欢
  • 2018-11-22
  • 2019-02-24
  • 2019-10-04
  • 2011-12-04
  • 2018-12-30
  • 2020-05-03
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多