7.4 密码 aes 后传输
效果
AES 介绍
密码需要在传输中加密,防止被网关抓包,平时你们用的 wifi 都是可以被抓包的
https://zh.wikipedia.org/wiki/高级加密标准
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael 加密法(荷兰语发音:ˈrɛindaːlˈrɛindaːl,音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
之所以选这个加密法,是因为 wordpress rest api 中的接口,输入的 password 是一个明文,其实输入 md5 签名更好。
实现步骤:
第 1 步:安装插件 encrypt
第 2 步:定义常量
lib/common/values/constants.dart
1 2 3
| static const aesKey = 'aH5aH5bG0dC6aA3oN0cK4aU5jU6aK2lN'; static const aesIV = 'hK6eB4aE1aF3gH5q';
|
aesKey
加密 key 32 位
aesIV
加密向量 16 位
具体的请联系后端工程师,保持一致可调通
第 3 步:创建加密类 encrypt
lib/common/utils/encrypt.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import 'package:encrypt/encrypt.dart'; import 'package:flutter_woo_commerce_getx_learn/common/index.dart';
class EncryptUtil { static final EncryptUtil _instance = EncryptUtil._internal(); factory EncryptUtil() => _instance; EncryptUtil._internal() { encrypter = Encrypter(AES( key, mode: AESMode.cbc, padding: 'PKCS7', )); }
final key = Key.fromUtf8(Constants.aesKey); final iv = IV.fromUtf8(Constants.aesIV); late Encrypter encrypter;
String aesEncode(String content) { final encrypted = encrypter.encrypt(content, iv: iv); return encrypted.base64; } }
|
第 4 步:登录加密
lib/pages/system/login/controller.dart
1 2 3 4 5 6 7 8 9 10 11 12 13
| Future<void> onSignIn() async { if ((formKey.currentState as FormState).validate()) { try { Loading.show();
var password = EncryptUtil().aesEncode(passwordController.text);
UserToken res = await UserApi.login(UserLoginReq( ... password: password, ));
|
第 5 步:注册加密
lib/pages/system/register/controller.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void onSignUp() { if ((formKey.currentState as FormState).validate()) { var password = EncryptUtil().aesEncode(passwordController.text);
Get.offNamed( RouteNames.systemRegisterPin, arguments: UserRegisterReq( ... password: password, ), ); } }
|
提交代码到 git