swift - 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)
}
解决方案
推荐阅读
- swift - 使用 CVPixelBuffer 是创建 CAMetalTexture(MTLTexture) 的唯一方法吗?
- c++ - 有没有办法将向量放入括号中
- android-studio - android studio中的蓝屏消失了
- python - 神经网络中的回归问题是否需要归一化
- r - AI平台R笔记本
- c - 创建 n 大小字节的数据类型
- reactjs - Google 地方信息(多个)
- powershell - Powershell 测试网站页面可用性和 HTTP 响应代码状态 try/catch
- python - 在仿射中使用极小的数字。在python中仿射
- php - php文件内容第一次不正确