SecKeyEncrypt返回错误-50和0 cipherSize

时间:2016-08-01 23:38:21

标签: swift encryption public-key-encryption pki

我正在将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密码长度。

我正在使用公钥和dataPointer的hexdump来确保它们没问题,但是无法通过SecKeyEncrypt调用找到问题

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

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

我使用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)

鉴于两种方法都使用hexDump报告了一个64字节的块,其中0x00,我做了一个快速测试并查看了之前的代码,发现删除“cipherBuffer [buflen] = 0”的行修复了这个问题。

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