Search code examples
javaflutterencryptiondartmedia

How can I encrypt video file using Dart?


I am trying to encrypt a video clip using dart. I have tested this java code https://stackoverflow.com/a/9496626/8511016 and would like to do the same but using dart.


Solution

  • Here is the solution that I found. Hope it helps. Remember to add the package encryption package to pubspec.yaml

    import 'dart:convert';
    import 'dart:io';
    
    import 'package:encrypt/encrypt.dart';
    
    main() {
    
      perfomEncryptionTasks();
    }
    
    perfomEncryptionTasks() async {
      await encryptFile();
      await decryptFile();
    }
    
    encryptFile() async {
      File inFile = new File("video.mp4");
      File outFile = new File("videoenc.aes");
    
      bool outFileExists = await outFile.exists();
    
      if(!outFileExists){
        await outFile.create();
      }
    
      final videoFileContents = await inFile.readAsStringSync(encoding: latin1);
    
      final key = Key.fromUtf8('my 32 length key................');
      final iv = IV.fromLength(16);
    
      final encrypter = Encrypter(AES(key));
    
      final encrypted = encrypter.encrypt(videoFileContents, iv: iv);
      await outFile.writeAsBytes(encrypted.bytes);
    }
    
    decryptFile() async {
      File inFile = new File("videoenc.aes");
      File outFile = new File("videodec.mp4");
    
      bool outFileExists = await outFile.exists();
    
      if(!outFileExists){
        await outFile.create();
      }
    
      final videoFileContents = await inFile.readAsBytesSync();
    
      final key = Key.fromUtf8('my 32 length key................');
      final iv = IV.fromLength(16);
    
      final encrypter = Encrypter(AES(key));
    
      final encryptedFile = Encrypted(videoFileContents);
      final decrypted = encrypter.decrypt(encryptedFile, iv: iv);
    
      final decryptedBytes = latin1.encode(decrypted);
      await outFile.writeAsBytes(decryptedBytes);
    
    }