|
|
|
@ -11,12 +11,47 @@ import 'package:encrypt/encrypt.dart';
|
|
|
|
|
import 'dart:convert';
|
|
|
|
|
import 'package:crypto/crypto.dart';
|
|
|
|
|
import 'package:pointycastle/asymmetric/api.dart';
|
|
|
|
|
import 'package:flutter/services.dart' show rootBundle;
|
|
|
|
|
import 'package:recook/utils/print_util.dart';
|
|
|
|
|
|
|
|
|
|
class SCEncryptUtil {
|
|
|
|
|
static final String _serverRSAPublicKey = "assets/keys/server_rsa_public_key.pem";
|
|
|
|
|
static final String _appRSAPrivateKey = "assets/keys/app_rsa_private_key.pem";
|
|
|
|
|
static final String _serverRSAPublicKey = '''-----BEGIN PUBLIC KEY-----
|
|
|
|
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzNWyjYe3qt4YRTDwANxD
|
|
|
|
|
PNLAJ9TZBuHsSqSjJM5B35fABwN3gwm5Q/SCz/6kgKTqeSgCVPFYhO/zOD6G8K7E
|
|
|
|
|
JLgx95ZIeAB9EkW+xrhFDDthUZAkA03zHJO6SkFKOciLFVi94BdCdGlNFlnaBBqA
|
|
|
|
|
+8XvCpD1V8DFc/9cpb5icZvngu8vEkwkbYceCXKUMNxoXY/E2cFe8f2tVFR5pRkQ
|
|
|
|
|
gRLbM70jt4yBGOD8pbuk6fcnD7ghGWgzMq/845N3wISSTp/gAQg8403Fk+8AoL+F
|
|
|
|
|
KgxUkjUOpPI2XrcpQm0EphuAX4J0Xvo3Hu6TEPZYyqULEXGT2Jukmh0NSkNO0F39
|
|
|
|
|
xwIDAQAB
|
|
|
|
|
-----END PUBLIC KEY-----
|
|
|
|
|
''';
|
|
|
|
|
static final String _appRSAPrivateKey = '''-----BEGIN RSA PRIVATE KEY-----
|
|
|
|
|
MIIEowIBAAKCAQEAwJwF6sTXsaenWVz75n991FaIYO06ArFMDRl4g3SgzegHIP3c
|
|
|
|
|
3o9QJ+msH90Resowk1On6E1zrVoey55sIiEMnMqxlBrLkYhMZy0hK7eDL53qZ80C
|
|
|
|
|
hAxANtmTWV0gPOgaaPb0xrAdDfVgVZepyBTdP8D5t7t6+0BbpHUJeqVyYfZgmLzt
|
|
|
|
|
FM2QFDRJ9cWcTJOGe7WVQ483i2J67VYR5hgKMdBWGYJ++6UXzA4EcwkJ/p+yngcl
|
|
|
|
|
p5NXZT+Spv7cni/VffmAcp1K+6P4IbRWLpoXQyWc5e9+09q1Djf9Updz2DpJ88fh
|
|
|
|
|
RaICRxTteZmoCpqHS2Hr1oKVRe46QlEBEwK3CwIDAQABAoIBABY668Po7Cwo+Xuq
|
|
|
|
|
67fyxwcW5a6qMqPU6r4oTmx9rYGWYhxAsJlPWSUCJ0eWMEpHw8t9QEfjiJJdcGh3
|
|
|
|
|
5Gsb/WSrUEuTvCMT5B2Ua9ur1oxMYZ2RX9T1xQOPoR4TTYE6GLI8rouwD+pog7Hd
|
|
|
|
|
S084eUC+eRPno44UI3+bsnhhWA5OOhXr5JCIr0orYHoAGZTwu/zTRhnNkoCedCS2
|
|
|
|
|
4WPhI2meTeP3O7wYNLhkQ94kdupDXnEOIa1XXAxB6gMeDAEq9XIcokARA48Dc1b3
|
|
|
|
|
il59W+y4qqbUk5jOXTOim8uxRXIaXl8l5a5oHRYc89PdhJOyifF5KNXFForxUf+u
|
|
|
|
|
06K1wiECgYEA5e4M+vgFRd9GITiB1KRAYNfxa1EPjJ7WxLMxi1DUhzJ+HssCJZmc
|
|
|
|
|
Gr2LgmDG9iIGcfxqSrcfQcUkfnSfIkqq+Mp7fO89AhzbJL0ix5OJMAb2yQpfncBO
|
|
|
|
|
qkupiPMabjagW30MLBmRHKWLmR6srT1OLJreXkT6XsGFoCbd4rnGvdUCgYEA1nK1
|
|
|
|
|
jCiEm1ZHSKRV70nAovJyKTvie7z+5I35iiUVxyJ2G5zY5YWkPVdPU44eKqX2xl7a
|
|
|
|
|
FstTI/0LTFgBzh43EQ5lXNbLPvyZ58DMiWSEkeBgZa1J8SO53gR99SzSIuTj955B
|
|
|
|
|
KZZG7hWfMfEDtU/VKn6W+CW0veTwFWcZHXv6sV8CgYAcoc0p/3KgpdIU1vWL5jxC
|
|
|
|
|
EwH0LC70gt8ZtXrI73LXtxjverY0unEu/0V9IdIE2m3VCequjSkuRn9p49nhKk0q
|
|
|
|
|
GATSpPQC7Fb5tze6hIvD2Eoo9Mq9WTIykKN281bqPJExc1vtre1dFNxSX/h+xjCS
|
|
|
|
|
62IfeRV4cT7Tl6Nv1VSDVQKBgQDBtlzIftFKgGVj+Q6nWLfqeZcmKDIuFEsrqhP/
|
|
|
|
|
9f/2IesOhmBm9JGn13aQw4/8dm60Qno+nOw9Vhcen2ECD8kuXxKxClYOT5+2+THJ
|
|
|
|
|
6kLWgxiQwDhK2zrKksQ09IfdfWVwCERUjKsF5gIn2s6+uZ6VBETbYzQhVOyKaNcH
|
|
|
|
|
CzcpgQKBgCtcw+QtR+YKGBC62AabzOz+KZ+uUYH60R1Q3nbbYx4KuBVbTZPp5/yP
|
|
|
|
|
NDL7HaaKOvh1rUrnKh0q0yU6OJuVOw6c9Av6zph9hmfyAiovSEvyEIK6o6w34az/
|
|
|
|
|
+4zt/BhRXo24dgnaYZ8a3EEpS0KnlIrgexAWhvTuMAXSeXJXy9B6
|
|
|
|
|
-----END RSA PRIVATE KEY-----
|
|
|
|
|
''';
|
|
|
|
|
|
|
|
|
|
test() async {
|
|
|
|
|
// int timestamp = DateTime.now().second;
|
|
|
|
@ -65,7 +100,8 @@ class SCEncryptUtil {
|
|
|
|
|
return md5Str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Future<String> aesEncrypt({String key, String encryptString,bool log= false}) async {
|
|
|
|
|
static Future<String> aesEncrypt(
|
|
|
|
|
{String key, String encryptString, bool log = false}) async {
|
|
|
|
|
final iv = IV.fromLength(32);
|
|
|
|
|
final aesKey = Key.fromUtf8(key);
|
|
|
|
|
// 使用aes-ecb-256,PKCS7Padding 加密参数
|
|
|
|
@ -77,23 +113,24 @@ class SCEncryptUtil {
|
|
|
|
|
return paramsEncrypted.base64;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static Future<String> aesDecrypt({String key,String decryptString,bool log = false}) async {
|
|
|
|
|
static Future<String> aesDecrypt(
|
|
|
|
|
{String key, String decryptString, bool log = false}) async {
|
|
|
|
|
final iv = IV.fromLength(32);
|
|
|
|
|
final aesKey = Key.fromUtf8(key);
|
|
|
|
|
// 使用aes-ecb-256,PKCS7Padding 加密参数
|
|
|
|
|
final encrypter = Encrypter(AES(aesKey, mode: AESMode.ecb));
|
|
|
|
|
final decrypted = encrypter.decrypt(Encrypted.fromBase64(decryptString), iv: iv);
|
|
|
|
|
final decrypted =
|
|
|
|
|
encrypter.decrypt(Encrypted.fromBase64(decryptString), iv: iv);
|
|
|
|
|
if (log) {
|
|
|
|
|
DPrint.printf("AES 解密 ---- $decrypted");
|
|
|
|
|
}
|
|
|
|
|
return decrypted;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static Future<String> rsaEncrypt({String encryptString,bool log =false}) async {
|
|
|
|
|
static Future<String> rsaEncrypt(
|
|
|
|
|
{String encryptString, bool log = false}) async {
|
|
|
|
|
final parser = RSAKeyParser();
|
|
|
|
|
String publicKeyString = await rootBundle.loadString(_serverRSAPublicKey);
|
|
|
|
|
String publicKeyString = _serverRSAPublicKey;
|
|
|
|
|
RSAPublicKey publicKey = parser.parse(publicKeyString);
|
|
|
|
|
final rsaEncrypter = Encrypter(RSA(publicKey: publicKey));
|
|
|
|
|
final rsaEncrypted = rsaEncrypter.encrypt(encryptString);
|
|
|
|
@ -104,12 +141,14 @@ class SCEncryptUtil {
|
|
|
|
|
return rsaEncrypted.base64;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Future<String> rsaDecrypt({String decryptString,bool log = false}) async {
|
|
|
|
|
static Future<String> rsaDecrypt(
|
|
|
|
|
{String decryptString, bool log = false}) async {
|
|
|
|
|
final parser = RSAKeyParser();
|
|
|
|
|
String privateKeyString = await rootBundle.loadString(_appRSAPrivateKey);
|
|
|
|
|
String privateKeyString = _appRSAPrivateKey;
|
|
|
|
|
RSAPrivateKey private = parser.parse(privateKeyString);
|
|
|
|
|
final rsaDecrypter = Encrypter(RSA(privateKey: private));
|
|
|
|
|
final rsaEncrypted = rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString));
|
|
|
|
|
final rsaEncrypted =
|
|
|
|
|
rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString));
|
|
|
|
|
if (log) {
|
|
|
|
|
// DPrint.printf("RSA 私钥 ---- $privateKeyString");
|
|
|
|
|
DPrint.printf("RSA 解密 ---- $rsaEncrypted");
|
|
|
|
|