Ios Swift中的SHA256-导入框架问题

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中的一个函数中使用CC_SHA256_DIGEST_LENGTH,它抛出了一个错误,因为它找不到该符号。我已经尝试了所有的方法,在桥头中导入CommonCrypto并尝试使用.map解决方案。。什么都不管用

如何在Swift中使用CC_SHA256_DIGEST_长度?所有的解决方案似乎都停止了工作。
谢谢大家!

在桥接标题中添加以下行:
#导入

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
}