如何在swift中做HMAC-SHA1

时间:2015-03-17 05:51:20

标签: swift

我基本上是在尝试使用String并在php中执行这样的操作:

    $signature= base64_encode(hash_hmac('sha1', $data, $secretKey, true));

但是,在 Swift 中执行此操作... 我看到很多关于其他人试图用CommonCrypto做事的帖子,但是这个模块似乎没有安装。

真的有3个问题:

  1. CommonCrypto是正确的方法吗?
  2. 如果是,我该如何添加框架?
  3. 如果CommonCrypto不是最好的方法,那是什么?
  4. 我目前的代码如下:

        var authString:String = "PUT\nTEST=BLAH\nTEST2=BLAHBLAHBLAH"
        let hmacResult:String = authString.sha1()
    
        ...
    
        extension String {
            func sha1() -> String {
              //Do Something...
            }
        }
    

1 个答案:

答案 0 :(得分:2)

你绝对应该使用CommonCrypto,因为它已经在每台设备上都可用,经过充分测试和快速。您只需要添加一个包含

的桥接头
#import <CommonCrypto/CommonCrypto.h>

如前所述,您可以查找here如何添加桥接标头。

要计算HMAC,您只需要此扩展程序:

extension String {

    func hmac(key: String) -> String {
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
        CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), 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")

结果:

0c94515c15e5095b8a87a50ba0df3bf38ed05fe6