crypto.dart 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 Crytpo {
  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, String keyText, String ivText) {
  16. final key = Key(base64Decode(keyText));
  17. final iv = IV(base64Decode(ivText));
  18. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  19. return cipher.encrypt(plainText, iv: iv).bytes;
  20. }
  21. static String encryptBytes(
  22. List<int> plainText, String keyText, String ivText) {
  23. final key = Key(base64Decode(keyText));
  24. final iv = IV(base64Decode(ivText));
  25. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  26. return cipher.encryptBytes(plainText, iv: iv).base64;
  27. }
  28. static Uint8List encryptBytesUint8(
  29. List<int> plainText, String keyText, String ivText) {
  30. final key = Key(base64Decode(keyText));
  31. final iv = IV(base64Decode(ivText));
  32. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  33. return cipher.encryptBytes(plainText, iv: iv).bytes;
  34. }
  35. static String decrypt(String cipherText, String keyText, String ivText) {
  36. final key = Key(base64Decode(keyText));
  37. final iv = IV(base64Decode(ivText));
  38. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  39. final Encrypted data = Encrypted.fromBase64(cipherText);
  40. return cipher.decrypt(data, iv: iv);
  41. }
  42. static List<int> decryptBytes(
  43. String cipherText, String keyText, String ivText) {
  44. final key = Key(base64Decode(keyText));
  45. final iv = IV(base64Decode(ivText));
  46. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  47. final Encrypted data = Encrypted.fromBase64(cipherText);
  48. return cipher.decryptBytes(data, iv: iv);
  49. }
  50. static List<int> decryptBytesUint8(
  51. Uint8List cipherText, String keyText, String ivText) {
  52. final key = Key(base64Decode(keyText));
  53. final iv = IV(base64Decode(ivText));
  54. final cipher = Encrypter(AES(key, mode: AESMode.ctr, padding: null));
  55. final Encrypted data = Encrypted(cipherText);
  56. return cipher.decryptBytes(data, iv: iv);
  57. }
  58. static String _md5(String data) {
  59. return crypto.md5.convert(utf8.encode(data)).toString();
  60. }
  61. static Future<String> md5(String data) {
  62. return foundation.compute(_md5, data);
  63. }
  64. static Future<String> _md5File(String filename) async {
  65. final input = File(filename);
  66. if (!input.existsSync()) {
  67. return '';
  68. }
  69. final digest = await crypto.md5.bind(input.openRead()).first;
  70. return digest.toString();
  71. }
  72. static Future<String> md5File(String filename) {
  73. return foundation.compute(_md5File, filename);
  74. }
  75. }