我正在将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调用找到问题
任何帮助将不胜感激
答案 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”的行修复了这个问题。
它似乎与数组的零终止有关,或者我可能做了一些奇怪的事情。