| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import 'dart:convert';
- import 'dart:typed_data';
- import 'package:encrypt/encrypt.dart';
- class CryptData {
- final Uint8List _byte;
- CryptData(Uint8List byte) : _byte = byte;
- CryptData.fromUtf8(String base64data) : _byte = base64Decode(base64data);
- CryptData.fromBase64(String base64data) : _byte = base64Decode(base64data);
- CryptData.fromHex(String hexData) : _byte = decodeHexString(hexData);
- Uint8List get byte => _byte;
- String get base64 => base64Encode(_byte);
- }
- class EncryptedAesCbc {
- final CryptData iv;
- final CryptData encrypted;
- EncryptedAesCbc({
- required this.iv,
- required this.encrypted,
- });
- EncryptedAesCbc.fromBase64({
- required String base64iv,
- required String base64encrypted,
- }) : iv = CryptData.fromBase64(base64iv), encrypted = CryptData.fromBase64(base64encrypted);
- }
- EncryptedAesCbc encryptAesCbc(String plainText, CryptData password) {
- final iv = IV.fromLength(16); // AES-CBC 必需的16字节IV
- final key = Key(password.byte);
- final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
- final encrypted = encrypter.encrypt(plainText, iv: iv);
- return EncryptedAesCbc(iv: CryptData(iv.bytes), encrypted: CryptData(encrypted.bytes));
- }
- String decryptAesCbc(EncryptedAesCbc encrypted, CryptData password) {
- final iv = IV(encrypted.iv.byte);
- final key = Key(password.byte);
- final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
- final decrypted = encrypter.decrypt(Encrypted(encrypted.encrypted.byte), iv: iv);
- return decrypted;
- }
|