Ios Swift中的SHA256-导入框架问题
我试图在Swift中的一个函数中使用CC_SHA256_DIGEST_LENGTH,它抛出了一个错误,因为它找不到该符号。我已经尝试了所有的方法,在桥头中导入CommonCrypto并尝试使用.map解决方案。。什么都不管用 如何在Swift中使用CC_SHA256_DIGEST_长度?所有的解决方案似乎都停止了工作。Ios Swift中的SHA256-导入框架问题,ios,security,swift,Ios,Security,Swift,我试图在Swift中的一个函数中使用CC_SHA256_DIGEST_LENGTH,它抛出了一个错误,因为它找不到该符号。我已经尝试了所有的方法,在桥头中导入CommonCrypto并尝试使用.map解决方案。。什么都不管用 如何在Swift中使用CC_SHA256_DIGEST_长度?所有的解决方案似乎都停止了工作。 谢谢大家! 在桥接标题中添加以下行: #导入 Swift 2.x示例: func doSha256(#dataIn:NSData) -> NSData { var
谢谢大家! 在桥接标题中添加以下行:
#导入
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;
}
输出:
clearData:636c6561724461746130313233343536
哈希:
AABC766B357564E41F912D494BCCBFA16924B574ABDBA9E3E9DA0C8920A
我没有在目标构建阶段添加任何框架。您确定桥接标头设置正确吗?我添加了一个.m文件,让系统自动添加桥接头并更新任何目标设置 从sunsetted documentation部分移动的常规哈希方法: 此函数接受散列名称和要散列的数据,并返回数据: name: A name of a hash function as a String data: The Data to be hashed returns: the hashed result as Data
注意:MD2、MD4、MD5和SHA1不应在新工作中使用,它们对于消息摘要的使用不再安全。在问题中包含问题代码和准确完整的错误消息总是有帮助的。在这种情况下,框架版本也会很好。仍然会收到错误吗“使用未解析标识符'CC_SHA256_DIGEST_LENGTH'”以及CC_LONG和CC_SHA256的相同错误。我在桥头中有CommonCrypto导入。我需要向项目添加任何框架吗?无法使其正常工作:(最后!问题是,当我导入.m文件以生成桥接头文件时,其中一个目标没有勾选。感谢您的帮助!找到它:哦,同样重要的@Panda感谢您找到指向sunsetted documentation部分的链接。我已将其添加到答案中。在Swift 4.X中,“import CommonCrypto”不是#import name: A name of a hash function as a String data: The Data to be hashed returns: the hashed result as Data
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
}