源代碼:
AccountEntity(
{required String account,
required String password,})
: account = encrypter.encrypt(account,iv: iv).base64,
password = encrypter.encrypt(password,iv: iv).base64,;
解密代碼:
static final encrypter = Encrypter(AES(key));
encrypter.decrypt(Encrypted.fromBase64(src),iv: iv);
?假設:account = a; password=b; a加密后n0yvxAHkx5kZH3yB9brlsQ==
結果:
加密成功,數據庫里存儲的時間確實是加密后的數據n0yvxAHkx5kZH3yB9brlsQ==,但是解密就出問題了,解密的結果是數據庫里存儲的加密后的值n0yvxAHkx5kZH3yB9brlsQ==,跟沒解密一樣。
原因分析:
在數據庫查找到數據之后也會創建AccountEntity實體類,這時候傳入的是加密后的數據n0yvxAHkx5kZH3yB9brlsQ==,然后創建實體類就會再次調用encrypter.encrypt(account,iv: iv).base64,對數據進行了二次加密,所以解密是對n0yvxAHkx5kZH3yB9brlsQ==的密文進行了解密,得出了n0yvxAHkx5kZH3yB9brlsQ==。
解決方法:
不要在構造函數里加密
class AccountEntity { String account;String password;AccountEntity({required this.account,required this.password});static AccountEntity createAccount({required String account,required String password,
}) {return AccountEntity(: account = encrypter.encrypt(account,iv: iv).base64,password = encrypter.encrypt(password,iv: iv).base64);}
}