ios13 - iOS 13/Swift 5 Commoncrypto 的加密/解密问题
问题描述
我正在使用带有 AES128/CBC/PKCS7Padding 的 CommonCrypto 进行加密/解密。
参考上面的链接,代码适用于 iOS 13 以下版本,但不适用于 iOS 13 及以上版本。请建议适用于 iOS 13 的工作解决方案。提前致谢。
func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String?
{
if let keyData = key.data(using: String.Encoding.utf8),
let data = NSData(base64Encoded: self, options: .ignoreUnknownCharacters),
let cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128)
{
let keyLength = size_t(kCCKeySizeAES128)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(options)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
iv,
data.bytes, data.length,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
let unencryptedMessage = String(data: cryptData as Data, encoding:String.Encoding.utf8)
print("Decrypt Result unencryptedMessage:::",unencryptedMessage as Any)
return unencryptedMessage
}
else {
print("\(UInt32(cryptStatus))")
return nil
}
}
else {
Logger.log(message: "Faild to decrypt the string", event: .e) // Error
return nil
}
}
解决方案
推荐阅读
- javascript - 为 Javascript 中不存在的 json 属性添加默认值
- powershell - 其他人如何将服务器名称收集到像 C:\Servers.csv 这样的文件中
- javascript - python PIL _io.BytesIO无法读取用canvas转换的图像
- c++ - C++ if (false) 条件评估?
- java - 检查 Guava HashBasedTable 是否包含任何空单元格
- javascript - 如何改进或优化这段代码
- scala - 无法解析 Option 类型的 Scala flatMap 方法。这样做的正确方法是什么?
- python - 抓取需要点击 javascript 链接的安全网站
- ms-access - 使用一个表单字段和联合查询搜索多个订单 ID
- javascript - 编写 ESLint 规则,如何通过标识符找到导出的类?