SecKeyEncrypt returns 错误 -50 和 0 cipherSize

SecKeyEncrypt returns error -50 and 0 cipherSize

我正在将 PKI api 移植到 Swift 2.2 并发现以下错误。 Objective-C.

一切正常

要加密的数据对象大小为 32 字节。这是我正在使用的代码。

let buflen = 64
var cipherBuffer = UnsafeMutablePointer<UInt8>.alloc(buflen)
cipherBuffer[buflen] = 0 // zero terminate

var cipherLength: Int = 0

var statusCode: OSStatus?

let dataPointer = UnsafePointer<UInt8>(data.bytes)

statusCode = SecKeyEncrypt(publicKey, SecPadding.PKCS1, dataPointer, data.length, cipherBuffer, &cipherLength)

这会导致错误 -50 和 0 密码长度。

我正在对 public 密钥和数据指针进行 hexdump 以确保它们正常,但找不到 SecKeyEncrypt 调用的问题

任何帮助将不胜感激

经过一番研究,我找到了解决问题的方法

我正在创建 cipherBuffer 使用 alloc 和零终止数组,如下所示:

let buflen = 64
var cipherBuffer = UnsafeMutablePointer<UInt8>.alloc(buflen)
cipherBuffer[buflen] = 0 // zero terminate

我尝试了以下方法,效果很好。

let blockSize = SecKeyGetBlockSize(publicKey) //64
var cipherBuffer = [UInt8](count: Int(blockSize), repeatedValue: 0)

鉴于这两种方法都使用 hexDump 报告了一个 64 字节的块和 0x00,我做了一个快速测试并检查了以前的代码,发现删除带有 "cipherBuffer[buflen] = 0" 的行可以解决问题。

看来和数组的零终止有关,或者我可能做了什么奇怪的事情。