crypto.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'dart:typed_data';
  4. import 'package:flutter/foundation.dart' as foundation;
  5. import 'package:crypto/crypto.dart' as crypto;
  6. import 'package:encrypt/encrypt.dart';
  7. class Crypto {
  8. static String encrypt(String plainText, String keyText, String ivText) {
  9. final key = Key(base64Decode(keyText));
  10. final iv = IV(base64Decode(ivText));
  11. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  12. return cipher.encrypt(plainText, iv: iv).base64;
  13. }
  14. static Uint8List encryptUint8(
  15. String plainText,
  16. String keyText,
  17. String ivText,
  18. ) {
  19. final key = Key(base64Decode(keyText));
  20. final iv = IV(base64Decode(ivText));
  21. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  22. return cipher.encrypt(plainText, iv: iv).bytes;
  23. }
  24. static String encryptBytes(
  25. List<int> plainText,
  26. String keyText,
  27. String ivText,
  28. ) {
  29. final key = Key(base64Decode(keyText));
  30. final iv = IV(base64Decode(ivText));
  31. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  32. return cipher.encryptBytes(plainText, iv: iv).base64;
  33. }
  34. static Uint8List encryptBytesUint8(
  35. List<int> plainText,
  36. String keyText,
  37. String ivText,
  38. ) {
  39. final key = Key(base64Decode(keyText));
  40. final iv = IV(base64Decode(ivText));
  41. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  42. return cipher.encryptBytes(plainText, iv: iv).bytes;
  43. }
  44. static String decrypt(String cipherText, String keyText, String ivText) {
  45. final key = Key(base64Decode(keyText));
  46. final iv = IV(base64Decode(ivText));
  47. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  48. final Encrypted data = Encrypted.fromBase64(cipherText);
  49. return cipher.decrypt(data, iv: iv);
  50. }
  51. static List<int> decryptBytes(
  52. String cipherText,
  53. String keyText,
  54. String ivText,
  55. ) {
  56. final key = Key(base64Decode(keyText));
  57. final iv = IV(base64Decode(ivText));
  58. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  59. final Encrypted data = Encrypted.fromBase64(cipherText);
  60. return cipher.decryptBytes(data, iv: iv);
  61. }
  62. static List<int> decryptBytesUint8(
  63. Uint8List cipherText,
  64. String keyText,
  65. String ivText,
  66. ) {
  67. final key = Key(base64Decode(keyText));
  68. final iv = IV(base64Decode(ivText));
  69. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  70. final Encrypted data = Encrypted(cipherText);
  71. return cipher.decryptBytes(data, iv: iv);
  72. }
  73. static String _md5(String data) {
  74. return crypto.md5.convert(utf8.encode(data)).toString();
  75. }
  76. static Future<String> md5(String data) {
  77. return foundation.compute(_md5, data);
  78. }
  79. static Future<String> _md5File(String filename) async {
  80. final input = File(filename);
  81. if (!input.existsSync()) {
  82. return '';
  83. }
  84. final digest = await crypto.md5.bind(input.openRead()).first;
  85. return digest.toString();
  86. }
  87. static Future<String> md5File(String filename) {
  88. return foundation.compute(_md5File, filename);
  89. }
  90. }