尝试在 Flutter 中使用 AES 打开加密文件

问题描述

我加密文件并将其存储在使用 AES 加密的文件夹中

名称存储在文件夹中,如 fileName.aes

但是当我尝试解密它时,我收到此消息错误:未处理的异常:filesystemexception:无法打开文件,路径 = '/storage/emulated/0/MyEncFolder/File: '/data/user/0/com.example .encryptionfiles/cache/file_picker/Inter-Milan.jpg.aes''(操作系统错误:没有那个文件或目录,errno = 2)

这是我的代码

    import 'dart:io';
import 'dart:typed_data';
import 'package:file_picker/file_picker.dart';
import 'package:Flutter/material.dart';
import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:Fluttertoast/Fluttertoast.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';

File _file;

class Welcome extends StatefulWidget {
  static String id = "Welcome";

  @override
  _WelcomeState createState() => _WelcomeState();
}

class _WelcomeState extends State<Welcome> {
  bool _isGranted = true;

  Future<Directory> get getAppDir async {
    final appDocDir = await getApplicationDocumentsDirectory();
    return appDocDir;
  }

  Future<Directory> get getExternalVisibleDir async {
    if (await Directory('/storage/emulated/0/MyEncFolder').exists()) {
      final externalDir = Directory('/storage/emulated/0/MyEncFolder');
      return externalDir;
    } else {
      await Directory('/storage/emulated/0/MyEncFolder')
          .create(recursive: true);
      final externalDir = Directory('/storage/emulated/0/MyEncFolder');
      return externalDir;
    }
  }

  getStoragePermission() async {
    if (!await Permission.storage.isGranted) {
      PermissionStatus result = await Permission.storage.request();
      if (result.isGranted) {
        setState(() {
          _isGranted = true;
        });
      } else {
        setState(() {
          _isGranted = false;
        });
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    getStoragePermission();
    return Scaffold(
        body: Container(
      alignment: Alignment.center,child: Column(
        mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [
          ElevatedButton(
            onpressed: () async {
              if (_isGranted) {
                Directory d = await getExternalVisibleDir;
                FilePickerResult result = await FilePicker.platform.pickFiles();
                _file = File(result.files.single.path);
                _downloadAndCreate(d,_file.path.split('/').last,_file.path);
              } else {
                print('no permission granted');
                getStoragePermission();
              }
            },child: Text(
              'اختار ملف للتشفير ',style: TextStyle(fontSize: 20,fontWeight: FontWeight.bold),),SizedBox(
            height: 20,ElevatedButton(
            onpressed: () async {
              if (_isGranted) {
                Directory d = await getExternalVisibleDir;
                FilePickerResult result = await FilePicker.platform.pickFiles();
                _file = File(result.files.single.path);
                _getnormalFile(d,_file);
              } else {
                print('no permission granted');
                getStoragePermission();
              }
            },child: Text(
              'فك تشفير الملف',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 20),],));
  }
}

void _downloadAndCreate(Directory dir,fileName,filePath) async {
  print('data downloading ...');
  Fluttertoast.showToast(msg: 'data downloading ...');
  var encResult = _encryptData(_file.path.codeUnits);
  String p = await _writeData(encResult,dir.path + '/$fileName.aes');
  print('file encrypted Successfully $p');
  Fluttertoast.showToast(msg: 'تم تشفير الملف بنجاح$p');
}

_getnormalFile(Directory d,File fileNameNew) async {
  Uint8List encData = await _readData(fileNameNew.readAsBytesSync());
  var plainData = await _decryptData(encData);
  String p = await _writeData(plainData,d.path + '/$fileNameNew');
  print('file decrypted Successfully $p');
  Fluttertoast.showToast(msg: 'تم فك تشفير الملف بنجاح $p');
}

Future<Uint8List> _readData(fileNameWithPath) async {
  print('Reading data ...');
  Fluttertoast.showToast(msg: 'قراءه البيانات ...');
  return await fileNameWithPath;
}

_decryptData(encData) {
  print('جاري فك التشفير ...');
  Fluttertoast.showToast(msg: 'File decryption is progress...');
  encrypt.Encrypted enc = new encrypt.Encrypted(encData);
  return MyEncrypt.myEncrypter.decryptBytes(enc,iv: MyEncrypt.myIv);
}

_encryptData(List<int> plainString) {
  print('Encrypting File...');
  Fluttertoast.showToast(msg: 'جاري تشفير الملف ...');
  final encrypted =
      MyEncrypt.myEncrypter.encryptBytes(plainString,iv: MyEncrypt.myIv);
  print("test : ${encrypted.bytes}");
  return encrypted.bytes;
}

Future<String> _writeData(dataToWrite,fileNameWithPath) async {
  print('كتابه البيانات ...');
  Fluttertoast.showToast(msg: 'كتابه البيانات ...');
  _file = File(fileNameWithPath);

  await _file.writeAsBytes(dataToWrite);

  return _file.absolute.toString();
}

class MyEncrypt {
  static final myKey = encrypt.Key.fromUtf8('OqbahahmeddxFlutterapplication29');
  static final myIv = encrypt.IV.fromUtf8('hfyrujfisoldkide');
  static final myEncrypter =
      encrypt.Encrypter(encrypt.AES(myKey,padding: null));
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)