Swift SecTransformExecute()使具有EXEC\u BAD\u访问权限的应用程序崩溃

Swift SecTransformExecute()使具有EXEC\u BAD\u访问权限的应用程序崩溃,swift,macos,security-framework,Swift,Macos,Security Framework,我有一个私钥/公钥对,我正试图用它们中的任何一个加密字符串。代码在OSX 10.11和Xcode 7.2上运行 func encryptMessageWithKey(message: String, keyType: KeyType, withCompletionBlock: (success: Bool, data: NSData?, error: AsymCryptoExceptions.Exceptions?) -> Void) { let uint

我有一个私钥/公钥对,我正试图用它们中的任何一个加密字符串。代码在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)
        }
}
func encryptMessageWithKey(消息:字符串,键类型:键类型,
withCompletionBlock:(成功:Bool,数据:NSData?,错误:AsymCryptoExceptions.Exceptions?)
->(无效){
让uintData=[UInt8](message.utf8)
让sourceData=CFDataCreate(kcfolocatordefault、uintData、uintData.count)
让privKey=self.getPrivateKeyReference()!
var errorRef:非托管?
让编码器=SecEncryptTransformCreate(privKey和errorRef)
扇区传输MStatAttribute(编码器,
kSecPaddingKey,
kSecPaddingPKCS1Key,
&errorRef)
扇区传输MStatAttribute(编码器,
K转换输入属性名称,
源数据,
&errorRef)
var encryptedData=扇区变压器执行(编码器和errorRef)
如果(errorRef!=nil){
let error=errorRef!.takeRetainedValue()
打印(错误)
}
}
上述操作失败得很惨,导致应用程序在运行时使用
EXEC\u BAD\u访问时崩溃。没有错误,什么都没有


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

即使这是一个非常老的问题,我也会回答它,以节省其他人的时间:)

我遇到了同样的问题,
secttransformexecute
给出了一个
EXC\u BAD\u ACCESS
错误。我注意到,只有当我更改或清理项目并重新构建应用程序时,错误才会发生,但当我运行相同的调试版本时,错误才会发生


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

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

我遇到了同样的问题,
secttransformexecute
给出了一个
EXC\u BAD\u ACCESS
错误。我注意到,只有当我更改或清理项目并重新构建应用程序时,错误才会发生,但当我运行相同的调试版本时,错误才会发生


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

请查看这篇文章,其中包括以下步骤:你有过这样的工作吗?我也遇到了同样的问题。@RobKeniger不,我停止了这个项目的工作……看看这篇文章,它一步一步地解决了这个问题:你做过这个工作吗?我也有同样的问题。@RobKeniger不,我停止了这个项目的工作。。。