【问题标题】:SecKeyEncrypt returns error -50 and 0 cipherSizeSecKeyEncrypt 返回错误 -50 和 0 cipherSize
【发布时间】:2016-12-07 04:07:13
【问题描述】:

我正在将 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 进行十六进制转储以确保它们正常,但找不到 SecKeyEncrypt 调用的问题

任何帮助将不胜感激

【问题讨论】:

    标签: swift encryption public-key-encryption pki


    【解决方案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 报告了一个 0x00 的 64 字节块,我做了一个快速测试并查看了之前的代码,发现删除带有“cipherBuffer[buflen] = 0”的行可以解决问题。

    好像和数组的零终止有关,或者我可能做了一些奇怪的事情。

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多