SecTransformExecute()使用EXEC_BAD_ACCESS使应用程序崩溃



我有一个私钥/公钥对,我正试图用它们中的任何一个加密字符串。该代码在OSX 10.11和Xcode 7.2 上运行

func encryptMessageWithKey(message: String, keyType: KeyType,
    withCompletionBlock: (success: Bool, data: NSData?, error: AsymCryptoExceptions.Exceptions?)
    -> Void) {
        let uintData = [UInt8](message.utf8)
        let sourceData = CFDataCreate(kCFAllocatorDefault, uintData, uintData.count)
        let privKey = self.getPrivateKeyReference()!
        var errorRef: Unmanaged<CFError>?
        let encoder = SecEncryptTransformCreate(privKey, &errorRef)
        SecTransformSetAttribute(encoder,
            kSecPaddingKey,
            kSecPaddingPKCS1Key,
            &errorRef)
        SecTransformSetAttribute(encoder,
            kSecTransformInputAttributeName,
            sourceData,
            &errorRef)
        var encryptedData = SecTransformExecute(encoder, &errorRef)
        if (errorRef != nil) {
            let error = errorRef!.takeRetainedValue()
            print(error)
        }
}

上述操作失败得很惨,导致应用程序在运行时使用EXEC_BAD_ACCESS崩溃。没有错误,什么都没有。

我的研究表明,可能存在一个与显式指定kSecPaddingPKCS1Key而不是NULL有关的错误,NULL将默认情况下将填充设置为PKCS1。然而,我无法将此值设置为NULL,因为Swift已将其替换为nil,并且不能在此处使用。

即使这是一个很老的问题,我也会回答它,也许可以为其他人节省一些时间:)

我遇到了同样的问题,SecTransformExecute给出了EXC_BAD_ACCESS错误。我注意到,只有当我更改或清理项目并重新构建应用程序时才会出现错误,但当我运行相同的调试构建时不会出现错误。

最后,用开发证书对应用程序进行签名是我解决问题的方法,因为之前由于Xcode提供的自动签名身份不同,应用程序无法使用密钥。

相关内容

  • 没有找到相关文章

最新更新