1

秘密鍵と公開鍵のペアがあり、そのいずれかで文字列を暗号化しようとしています。コードは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私の調査によると、パディングをデフォルトで PKCS1 に設定する NULL ではなく、明示的に指定することに関連するバグがある可能性があります。ただし、Swift がそれを nil に置き換えたため、この値を NULL に設定できませんでした。この値はこの場所では使用できません。

4

1 に答える 1