2017-06-05 56 views
0

我试图在将数据字符串发送到服务器之前对数据字符串执行HMAC SHA512加密,因为这是他们的要求。原生HMAC SHA512支持Swift 3.1

我发现了很多可能的解决方案,但它们都需要包含一些模块或框架。

是不是HMACSHA512本机不支持swift 3.1?

对不起,如果这是一个愚蠢的问题,我对swift比较陌生。

如果可用,我怎样才能使用hmac sha512简单地加密一些数据?

谢谢。

回答

1

CommonCrypto是在Apple设备上进行加密的本地方式。你不需要任何模块或框架,你只需add a bridging header和进口CommonCrypto:

#import <CommonCrypto/CommonCrypto.h> 

然后你可以计算一个简单的扩展您的HMAC(SWIFT 4):

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 

如果您在非Apple设备上使用Swift,则确实需要使用外部框架来执行加密。