swift - 在 swift 3.1 中获取 HMAC SHA512 的最小方法

标签 swift xcode

我正在使用 xcode 和 swift 3.1 编写应用程序

我需要为服务器的 api 调用创建 hmac sha512 哈希值。

我知道有各种框架(例如 CryptoSwift)为我们提供了此类功能。

但是我有兴趣知道是否可以在 native xcode/swift 3.1 中不使用任何库或框架。

如果没有那么为什么不呢?

此外,如果我确实需要使用该库,仅获取基于 hmac sha512 的库代码的最小方法是什么?

谢谢。

最佳答案

您绝对应该使用 CommonCrypto,因为它已经在所有设备上可用,经过充分测试且速度很快。您只需要添加一个桥接 header ,其中包含

#import <CommonCrypto/CommonCrypto.h>

您可以查找here如何添加桥接头。

然后,您可以使用简单的扩展 (Swift 4) 计算 HMAC:

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

关于swift - 在 swift 3.1 中获取 HMAC SHA512 的最小方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401731/

相关文章:

iphone - UISlider RGB 颜色更改并保存在 NSUserDefault

ios - 如何在 Siesta 中定义内容转换器?

iphone - 从另一个类调用方法时为空变量

ios - UIView 动画中的 UIButton 字体大小问题

Swift:有条件地设置私有(private) Ivar

swift - 使用回溯的最佳权重子集总和

c++ - 命名空间 'forward' 中没有名为 'std' 的成员

ios - swift 。声音不再播放第二次

ios - 如何以编程方式为 en 和 ar 语言环境布局带有文本的 UIImageView?

iphone - 在 swift 中使用带有 NSUserDefaults 的字典