Flutter (AESMode.ctr)模式下的文件解密显示异常,无法使用编码对数据进行解码';utf-8';用飞镖?
在使用aes ctr模式解码视频文件时,我遇到如下错误:Flutter (AESMode.ctr)模式下的文件解密显示异常,无法使用编码对数据进行解码';utf-8';用飞镖?,flutter,dart,ffmpeg,aes,Flutter,Dart,Ffmpeg,Aes,在使用aes ctr模式解码视频文件时,我遇到如下错误: 未处理的异常:FileSystemException:无法使用编码“utf-8”对数据进行解码。 用于加密文件的ffmpeg: ffmpeg-i samplevideo.mp4-vcodec copy-acodec copy-encryption\u scheme cenc aes ctr-encryption\u key 76A6C65C5EA762046BD749A2E632CBB-encryption\u kid a7e61c373
未处理的异常:FileSystemException:无法使用编码“utf-8”对数据进行解码。
用于加密文件的ffmpeg:
ffmpeg-i samplevideo.mp4-vcodec copy-acodec copy-encryption\u scheme cenc aes ctr-encryption\u key 76A6C65C5EA762046BD749A2E632CBB-encryption\u kid a7e61c373e219033c21091fa607bf3b8 enc v1\u file.mp4
使用Dart解码视频文件:
Future<String> decryptFile(filePath) async {
// filePath - Local encrypted file path
var encodedKey = 'NzZhNmM2NWM1ZWE3NjIwNDZiZDc0OWEyZTYzMmNjYmI=';
var encodedIv = 'YTdlNjFjMzczZTIxOTAzM2MyMTA5MWZhNjA3YmYzYjg=';
var encryptedBase64EncodedString = new File(filePath).readAsStringSync();
var decoded = base64.decode(encryptedBase64EncodedString); // Error in this line
final key1 = enc.Key.fromBase64(encodedKey);
final iv = enc.IV.fromBase64(encodedIv);
final encrypter = enc.Encrypter(enc.AES(key1, mode: enc.AESMode.ctr));
final decrypted = encrypter.decryptBytes(enc.Encrypted(decoded), iv: iv);
final filename = '${p.basenameWithoutExtension(filePath)}.mp4';
final directoryName = p.dirname(filePath);
final newFilePath = p.join(directoryName, filename);
var newFile = new File(newFilePath);
await newFile.writeAsBytes(decrypted);
return newFilePath;
}
未来解密文件(文件路径)异步{
//filePath-本地加密文件路径
var encodedKey='nzzhnmm2nwm1zwe3njiwndzizdc0oweyzmtnjymi=';
var encodedIv='YTdlNjFjMzczZTIxOTAzM2MyMTA5MWZhNjA3YmYzYjg=';
var encryptedBase64EncodedString=新文件(filePath).readAsStringSync();
var decoded=base64.decode(encryptedBase64EncodedString);//此行出错
最终键1=enc.Key.fromBase64(encodedKey);
最终iv=enc.iv.fromBase64(encodedIv);
最终加密机=enc.encrypter(enc.AES(键1,模式:enc.AESMode.ctr));
最终解密=encrypter.decryptBytes(加密(解码),iv:iv);
最终文件名=“${p.basenameWithoutExtension(filePath)}.mp4”;
final directoryName=p.dirname(文件路径);
final newFilePath=p.join(directoryName,filename);
var newFile=新文件(newFilePath);
等待newFile.writeAsBytes(解密);
返回newFilePath;
}
首先,您尝试以文本模式读取二进制文件,然后假设内容是Base64(不是),因此这肯定会失败。第二,你想做什么?CENC使用示例加密,它不加密整个文件。