import 'dart:typed_data'; import 'package:aes_crypt/aes_crypt.dart'; import 'package:encrypt/encrypt.dart'; import 'dart:convert'; import 'package:flutter/foundation.dart' as foundation; class CryptoUtil { static String getBase64EncodedSecureRandomString({int length = 32}) { return SecureRandom(length).base64; } static String encryptToBase64( String plainText, String base64Key, String base64IV) { final encrypter = AES(Key.fromBase64(base64Key)); return encrypter .encrypt( Uint8List.fromList(utf8.encode(plainText)), iv: IV.fromBase64(base64IV), ) .base64; } static String decryptFromBase64( String base64CipherText, String base64Key, String base64IV) { final encrypter = AES(Key.fromBase64(base64Key)); return utf8.decode(encrypter .decrypt( Encrypted.fromBase64(base64CipherText), iv: IV.fromBase64(base64IV), ) .toList()); } static Future encryptFileToFile( String sourcePath, String destinationPath, String key) async { final args = Map(); args["key"] = key; args["source"] = sourcePath; args["destination"] = destinationPath; return foundation.compute(runEncryptFileToFile, args); } static Future encryptDataToFile( Uint8List source, String destinationPath, String key) async { final args = Map(); args["key"] = key; args["source"] = source; args["destination"] = destinationPath; return foundation.compute(runEncryptDataToFile, args); } static Future decryptFileToFile( String sourcePath, String destinationPath, String key) async { final args = Map(); args["key"] = key; args["source"] = sourcePath; args["destination"] = destinationPath; return foundation.compute(runDecryptFileToFile, args); } static Future decryptFileToData(String sourcePath, String key) { final args = Map(); args["key"] = key; args["source"] = sourcePath; return foundation.compute(runDecryptFileToData, args); } } Future runEncryptFileToFile(Map args) { final encrypter = getEncrypter(args["key"]); return encrypter.encryptFile(args["source"], args["destination"]); } Future runEncryptDataToFile(Map args) { final encrypter = getEncrypter(args["key"]); return encrypter.encryptDataToFile(args["source"], args["destination"]); } Future runDecryptFileToFile(Map args) async { final encrypter = getEncrypter(args["key"]); return encrypter.decryptFile(args["source"], args["destination"]); } Future runDecryptFileToData(Map args) async { final encrypter = getEncrypter(args["key"]); return encrypter.decryptDataFromFile(args["source"]); } AesCrypt getEncrypter(String key) { final encrypter = AesCrypt(key); encrypter.aesSetMode(AesMode.cbc); encrypter.setOverwriteMode(AesCryptOwMode.on); return encrypter; }