首页 > 解决方案 > IOS:如何在swift中使用RSA公钥解密ciper?

问题描述

我想使用公钥解密。但它不起作用。有人可以帮助我吗?

discShadow_DecryptionWithRSAKey是我从服务器获取数据的委托方法。请在下面的代码段中找到更多信息。我正在使用 RSA 进行加密和解密。

private class func discShadow_DecryptionWithRSAKey(encryptedData:Data,rsaKeyRef:SecKey,padding:SecPadding) -> Data? {
    let blockSize = SecKeyGetBlockSize(rsaKeyRef)

    var encryptedDataAsArray = [UInt8](repeating: 0, count: encryptedData.count / MemoryLayout<UInt8>.size)
        (encryptedData as NSData).getBytes(&encryptedDataAsArray, length: encryptedData.count)

    var decryptedData = [UInt8](repeating: 0, count: 0)
    var idx = 0
    while (idx < encryptedDataAsArray.count ) {
        var idxEnd = idx + blockSize
        if ( idxEnd > encryptedDataAsArray.count ) {
            idxEnd = encryptedDataAsArray.count
        }
        var chunkData = [UInt8](repeating: 0, count: blockSize)
        for i in idx..<idxEnd {
            chunkData[i-idx] = encryptedDataAsArray[i]
        }

        var decryptedDataBuffer = [UInt8](repeating: 0, count: blockSize)
        var decryptedDataLength = blockSize

        let status = SecKeyDecrypt(rsaKeyRef, padding, chunkData, idxEnd-idx, &decryptedDataBuffer, &decryptedDataLength)
        if ( status != noErr ) {
            return nil
        }

        var idxFirstZero = -1
        var idxNextZero = decryptedDataBuffer.count
        for i in 0..<decryptedDataBuffer.count {
            if ( decryptedDataBuffer[i] == 0 ) {
                if ( idxFirstZero < 0 ) {
                    idxFirstZero = i
                } else {
                    idxNextZero = i
                    break
                }
            }
        }
        var newData = [UInt8](repeating: 0, count: idxNextZero-idxFirstZero-1)
        for i in idxFirstZero+1..<idxNextZero {
            newData[i-idxFirstZero-1] = decryptedDataBuffer[i]
        }

        decryptedData += newData

        idx += blockSize
    }

    return Data(bytes: UnsafePointer<UInt8>(decryptedData), count: decryptedData.count)
}

标签: swiftencryptionrsapublic-key

解决方案


推荐阅读