项目中用到了MZRSA来处理接口中的加密解密问题,但是在遇到超长数据时候容易造成手机内存溢出直接崩溃,于是对其局部进行了分段处理,结果运行良好:
注:由于两段方法几近相似,感兴趣的可以合二为一
1.分段加密
//分段加密
private static func encrypt(_ data: Data, with secKey: SecKey, and isSign: Bool) -> Data? {
let totalLen = data.count
let key_size = SecKeyGetBlockSize(secKey) * MemoryLayout<UInt8>.size
let block_size = key_size - 11
var outbuf = [UInt8](repeating: 0, count: key_size)
var blockCount = totalLen / block_size
if totalLen % block_size > 0, totalLen > 0 {
blockCount += 1
}
var resultData = Data()
for i in 0..<blockCount {
let loc = i * block_size
// 分段长度
let segLen = i == blockCount - 1 ? (totalLen - loc) : block_size
/