Swift中的SHA256 – 导入框架问题

我试图在我的一个函数在Swift中使用CC_SHA256_DIGEST_LENGTH,它会抛出一个错误,因为它找不到那个符号。 我已经尝试了一切,在Bridge-header中导入CommonCrypto并尝试.map解决scheme..没有任何工作。

我如何在Swift中使用CC_SHA256_DIGEST_LENGTH? 所有的解决scheme似乎都停止了工作。 谢谢!

将以下行添加到您的桥接头:
#import <CommonCrypto/CommonHMAC.h>

Swift 2.x示例:

 func doSha256(#dataIn:NSData) -> NSData { var shaOut: NSMutableData! = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH)); CC_SHA256(dataIn.bytes, CC_LONG(dataIn.length), UnsafeMutablePointer<UInt8>(shaOut.mutableBytes)); return shaOut; } 

Swift 3.0例子:

 func hashSHA256(data:Data) -> Data? { var hashData = Data(count: Int(CC_SHA256_DIGEST_LENGTH)) _ = hashData.withUnsafeMutableBytes {digestBytes in data.withUnsafeBytes {messageBytes in CC_SHA256(messageBytes, CC_LONG(data.count), digestBytes) } } return hashData } let clearData = "clearData0123456".data(using:String.Encoding.utf8)! print("clearData: \(clearData.map { String(format: "%02hhx", $0) }.joined())") let hash = hashSHA256(data:clearData) print("hash: \(hash!.map { String(format: "%02hhx", $0) }.joined())") 

输出:

clearData: 636c6561724461746130313233343536
哈希: aabc766b6b357564e41f4f912d494bccbfa16924b574abbdba9e3e9da0c8920a

我没有在目标构build阶段添加任何框架。
是确定桥接头设置正确吗? 我通过添加.m文件添加了我的,并让系统自动添加桥接头并更新任何目标设置。

从日落文档部分移动的一般散列方法:

这个函数需要一个散列名和数据被散列,并返回一个Data:

名称:散列函数的名称作为string  
数据:要散列的数据  
返回:散列结果作为数据  
 func hash(name:String, data:Data) -> Data? { let algos = ["MD2": (CC_MD2, CC_MD2_DIGEST_LENGTH), "MD4": (CC_MD4, CC_MD4_DIGEST_LENGTH), "MD5": (CC_MD5, CC_MD5_DIGEST_LENGTH), "SHA1": (CC_SHA1, CC_SHA1_DIGEST_LENGTH), "SHA224": (CC_SHA224, CC_SHA224_DIGEST_LENGTH), "SHA256": (CC_SHA256, CC_SHA256_DIGEST_LENGTH), "SHA384": (CC_SHA384, CC_SHA384_DIGEST_LENGTH), "SHA512": (CC_SHA512, CC_SHA512_DIGEST_LENGTH)] guard let (hashAlgorithm, length) = algos[name] else { return nil } var hashData = Data(count: Int(length)) _ = hashData.withUnsafeMutableBytes {digestBytes in data.withUnsafeBytes {messageBytes in hashAlgorithm(messageBytes, CC_LONG(data.count), digestBytes) } } return hashData } 

注意:MD2,MD4,MD5和SHA1不应该在新的工作中使用,它们不再适用于消息摘要的使用。