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”解决了这个问题。
它似乎与数组的零终止有关,或者我可能做了一些奇怪的事情。