swift - 如何快速播放目录中保存的本地加密AES128文件?
问题描述
如何快速播放目录中保存的本地加密AES128文件?我希望这是异步和逐块完成的。我把我写的代码放在下面的块中。
我的代码的问题是,当解码新块时,玩家不会注意到并且不会继续。但是文件在目录中运行。您认为这样做的最佳做法是什么?我没有找到任何好的解释。
// 从目录中分块数据
func chunkData(path: URL) {
do
{
let data = try Data(contentsOf: path)
let dataLen = (data as NSData).length
let fullChunks = Int(dataLen / 10240)
let totalChunks = fullChunks + (dataLen % 10240 != 0 ? 1 : 0)
var chunks:[Data] = [Data]()
for chunkCounter in 0..<totalChunks
{
var chunk:Data
let chunkBase = chunkCounter * 10240
var diff = 10240
if chunkCounter == totalChunks - 1
{
diff = dataLen - chunkBase
}
let range:Range<Data.Index> = chunkBase..<(chunkBase + diff)
chunk = data.subdata(in: range)
chunks.append(chunk)
}
print(chunks)
dataArray = chunks
decryptFile(data: dataArray[0])
}
catch
{
}
}
// 用于解密文件
static func aesDecrypt_file(data: Data) throws -> String {
let fileData = data
let decrypted = try AES(key: FILE_DECODE_KEY.bytes, blockMode: CTR(iv: "0000000000000000".bytes), padding: .noPadding).decrypt([UInt8](fileData))
let base = decrypted.toBase64()
return base ?? ""
}
解决方案
推荐阅读
- c# - 将委托/事件作为 ref 泛型参数传递
- python - 如何使多索引上的所有子索引具有相同的值
- python - 是否按行替换并将覆盖字典中的值两次?
- sugarcrm - 来自相关模块的 SugarCRM 过滤器
- android - 如果我为操作 PICK 指定 mimeType,则 VIEW Intent 过滤器上缺少 URL 错误
- json - 如何在 Postgres 中调用带有 json 参数的函数
- c# - How to concatenate a property expression and a lambda using Select?
- tensorflow - 启动 Tensorboard What-If 工具
- android - 如何使用数组/位图控制图像的大小?
- c# - 创建具有唯一用户名的新 AD 用户