crypto_util.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import 'dart:typed_data';
  2. import 'package:aes_crypt/aes_crypt.dart';
  3. import 'package:computer/computer.dart';
  4. import 'package:encrypt/encrypt.dart';
  5. import 'dart:convert';
  6. class CryptoUtil {
  7. static String getBase64EncodedSecureRandomString({int length = 32}) {
  8. return SecureRandom(length).base64;
  9. }
  10. static String encryptToBase64(
  11. String plainText, String base64Key, String base64IV) {
  12. final encrypter = AES(Key.fromBase64(base64Key));
  13. return encrypter
  14. .encrypt(
  15. utf8.encode(plainText),
  16. iv: IV.fromBase64(base64IV),
  17. )
  18. .base64;
  19. }
  20. static String decryptFromBase64(
  21. String base64CipherText, String base64Key, String base64IV) {
  22. final encrypter = AES(Key.fromBase64(base64Key));
  23. return utf8.decode(encrypter.decrypt(
  24. Encrypted.fromBase64(base64CipherText),
  25. iv: IV.fromBase64(base64IV),
  26. ));
  27. }
  28. static Future<String> encryptFileToFile(
  29. String sourcePath, String destinationPath, String key) async {
  30. final args = Map<String, String>();
  31. args["key"] = key;
  32. args["source"] = sourcePath;
  33. args["destination"] = destinationPath;
  34. return Computer().compute(runEncryptFileToFile, param: args);
  35. }
  36. static Future<String> encryptDataToFile(
  37. Uint8List source, String destinationPath, String key) async {
  38. final args = Map<String, dynamic>();
  39. args["key"] = key;
  40. args["source"] = source;
  41. args["destination"] = destinationPath;
  42. return Computer().compute(runEncryptDataToFile, param: args);
  43. }
  44. static Future<void> decryptFileToFile(
  45. String sourcePath, String destinationPath, String key) async {
  46. final args = Map<String, String>();
  47. args["key"] = key;
  48. args["source"] = sourcePath;
  49. args["destination"] = destinationPath;
  50. return Computer().compute(runDecryptFileToFile, param: args);
  51. }
  52. static Future<Uint8List> decryptFileToData(String sourcePath, String key) {
  53. final args = Map<String, String>();
  54. args["key"] = key;
  55. args["source"] = sourcePath;
  56. return Computer().compute(runDecryptFileToData, param: args);
  57. }
  58. }
  59. Future<String> runEncryptFileToFile(Map<String, String> args) {
  60. final encrypter = getEncrypter(args["key"]);
  61. return encrypter.encryptFile(args["source"], args["destination"]);
  62. }
  63. Future<String> runEncryptDataToFile(Map<String, dynamic> args) {
  64. final encrypter = getEncrypter(args["key"]);
  65. return encrypter.encryptDataToFile(args["source"], args["destination"]);
  66. }
  67. Future<String> runDecryptFileToFile(Map<String, dynamic> args) async {
  68. final encrypter = getEncrypter(args["key"]);
  69. return encrypter.decryptFile(args["source"], args["destination"]);
  70. }
  71. Future<Uint8List> runDecryptFileToData(Map<String, dynamic> args) async {
  72. final encrypter = getEncrypter(args["key"]);
  73. return encrypter.decryptDataFromFile(args["source"]);
  74. }
  75. AesCrypt getEncrypter(String key) {
  76. final encrypter = AesCrypt(key);
  77. encrypter.aesSetMode(AesMode.cbc);
  78. encrypter.setOverwriteMode(AesCryptOwMode.on);
  79. return encrypter;
  80. }