crypto_util.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'dart:typed_data';
  2. import 'package:aes_crypt/aes_crypt.dart';
  3. import 'package:encrypt/encrypt.dart';
  4. import 'dart:convert';
  5. import 'package:flutter/foundation.dart' as foundation;
  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. Uint8List.fromList(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
  24. .decrypt(
  25. Encrypted.fromBase64(base64CipherText),
  26. iv: IV.fromBase64(base64IV),
  27. )
  28. .toList());
  29. }
  30. static Future<String> encryptFileToFile(
  31. String sourcePath, String destinationPath, String key) async {
  32. final args = Map<String, String>();
  33. args["key"] = key;
  34. args["source"] = sourcePath;
  35. args["destination"] = destinationPath;
  36. return foundation.compute(runEncryptFileToFile, args);
  37. }
  38. static Future<String> encryptDataToFile(
  39. Uint8List source, String destinationPath, String key) async {
  40. final args = Map<String, dynamic>();
  41. args["key"] = key;
  42. args["source"] = source;
  43. args["destination"] = destinationPath;
  44. return foundation.compute(runEncryptDataToFile, args);
  45. }
  46. static Future<void> decryptFileToFile(
  47. String sourcePath, String destinationPath, String key) async {
  48. final args = Map<String, String>();
  49. args["key"] = key;
  50. args["source"] = sourcePath;
  51. args["destination"] = destinationPath;
  52. return foundation.compute(runDecryptFileToFile, args);
  53. }
  54. static Future<Uint8List> decryptFileToData(String sourcePath, String key) {
  55. final args = Map<String, String>();
  56. args["key"] = key;
  57. args["source"] = sourcePath;
  58. return foundation.compute(runDecryptFileToData, args);
  59. }
  60. }
  61. Future<String> runEncryptFileToFile(Map<String, String> args) {
  62. final encrypter = getEncrypter(args["key"]);
  63. return encrypter.encryptFile(args["source"], args["destination"]);
  64. }
  65. Future<String> runEncryptDataToFile(Map<String, dynamic> args) {
  66. final encrypter = getEncrypter(args["key"]);
  67. return encrypter.encryptDataToFile(args["source"], args["destination"]);
  68. }
  69. Future<String> runDecryptFileToFile(Map<String, dynamic> args) async {
  70. final encrypter = getEncrypter(args["key"]);
  71. return encrypter.decryptFile(args["source"], args["destination"]);
  72. }
  73. Future<Uint8List> runDecryptFileToData(Map<String, dynamic> args) async {
  74. final encrypter = getEncrypter(args["key"]);
  75. return encrypter.decryptDataFromFile(args["source"]);
  76. }
  77. AesCrypt getEncrypter(String key) {
  78. final encrypter = AesCrypt(key);
  79. encrypter.aesSetMode(AesMode.cbc);
  80. encrypter.setOverwriteMode(AesCryptOwMode.on);
  81. return encrypter;
  82. }