我有一个私钥/公钥对,我正在尝试使用其中任何一个加密String。代码在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相关的错误,默认情况下会将填充设置为PKCS1。但是,我无法将此值设置为NULL,因为Swift已将其替换为nil,并且无法在此位置使用。
答案 0 :(得分:0)
即使这是一个非常古老的问题,我也会回答它,或许可以在某个时候拯救别人:)
我遇到SecTransformExecute
出现EXC_BAD_ACCESS
错误的问题。我注意到错误只会在我更改或清理项目并重建应用程序时发生,但不会在我运行相同的调试版本时发生。
最后,使用开发证书对应用程序进行签名是为我解决的问题,因为在应用程序无法使用密钥之前,由于Xcode提供了不同的自动签名身份。