初始化
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:crypto/crypto.dart';
|
||||
import 'package:encrypt/encrypt.dart';
|
||||
|
||||
/// 新版本解密(项目自定义协议:12 字节 nonce + sha256 派生 key/iv + AES-CBC)
|
||||
String aesDecryptEx(String cipher, String key) {
|
||||
// final t1 = DateTime.now();
|
||||
const nonceLen = 12;
|
||||
final cipherBytes = base64Decode(cipher);
|
||||
final nonce = cipherBytes.sublist(0, nonceLen);
|
||||
final largeShaRaw = [...utf8.encode(key), ...nonce];
|
||||
final largeShaRawMid = largeShaRaw.length ~/ 2;
|
||||
final msgKeyLarge = sha256.convert(largeShaRaw).bytes;
|
||||
final msgKey = msgKeyLarge.sublist(8, 24);
|
||||
|
||||
final shaRawA = [...msgKey, ...largeShaRaw.sublist(0, largeShaRawMid)];
|
||||
final sha256a = sha256.convert(shaRawA).bytes;
|
||||
|
||||
final shaRawB = [...largeShaRaw.sublist(largeShaRawMid), ...msgKey];
|
||||
final sha256b = sha256.convert(shaRawB).bytes;
|
||||
|
||||
final aesKey = [...sha256a.sublist(0, 8), ...sha256b.sublist(8, 24), ...sha256a.sublist(24)];
|
||||
|
||||
final aesIV = [...sha256b.sublist(0, 4), ...sha256a.sublist(12, 20), ...sha256b.sublist(28)];
|
||||
|
||||
final encrypter = Encrypter(AES(Key(Uint8List.fromList(aesKey)), mode: AESMode.cbc));
|
||||
final decrypted = encrypter.decryptBytes(Encrypted(cipherBytes.sublist(nonceLen)), iv: IV(Uint8List.fromList(aesIV)));
|
||||
final text = const Utf8Decoder().convert(decrypted);
|
||||
return text;
|
||||
}
|
||||
Reference in New Issue
Block a user