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" 的行可以解决问题。
看来和数组的零终止有关,或者我可能做了什么奇怪的事情。
我正在将 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" 的行可以解决问题。
看来和数组的零终止有关,或者我可能做了什么奇怪的事情。