SecKeyEncrypt返回错误-50和0 cipherSize

问题描述:

我正在将一个PKI api移植到Swift 2.2并发现以下错误。 Objective-C中一切正常。SecKeyEncrypt返回错误-50和0 cipherSize

要加密的数据对象大小为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的密码长度。

我做的公钥和dataPointer的hexdump都以确保它们都OK,但不容找到与SecKeyEncrypt呼叫

任何帮助将不胜感激

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

我用alloc和零终止阵列创建cipherBuffer,如下所示:

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) 

鉴于这两种方法报道的64个字节的块使用进制打印0x00时,我做了快速测试和审查前面的代码,发现除去与线“cipherBuffer [buflen] = 0”解决了这个问题。

它似乎与数组的零终止有关,或者我可能做了一些奇怪的事情。