Flutter登录项目中解密字符串与输入值相等却判定不等问题
Flutter登录密码验证异常问题分析
我正在开发一个Flutter登录项目,加密解密流程看似正常,但验证用户输入密码时出现异常。执行代码后输出mypass mypass Failed,预期应该是mypass mypass Passed。
加密密码代码
final _getKey = encrypter.Key.fromUtf8(key); final encryptServ = encrypter.Encrypter(encrypter.AES(_getKey, mode: encrypter.AESMode.cbc)); final InitVect = encrypter.IV.fromUtf8(key.substring(0,16)); encrypter.Encrypted _encryptDat = encryptServ.encrypt(Value,iv: InitVect); return _encryptDat;
解密密码代码
final key = encrypterQERT.Key.fromUtf8('key'); final iv = encrypterQERT.IV.fromUtf8('key'); final encrypter = encrypterQERT.Encrypter(encrypterQERT.AES(key, mode: encrypterQERT.AESMode.cbc, padding: null)); final decrypted = encrypter.decrypt64(_passValues.elementAt(0), iv: iv);
密码验证代码
List<dynamic> _passValues = <dynamic>[]; for(final _userPass in _getPass.rows) { dynamic _getFirst = _userPass.assoc().values.elementAt(0); print(_getFirst); _passValues.add(_getFirst); } final key = encrypterQERT.Key.fromUtf8('key'); final iv = encrypterQERT.IV.fromUtf8('key'); final encrypter = encrypterQERT.Encrypter(encrypterQERT.AES(key, mode: encrypterQERT.AESMode.cbc, padding: null)); final decrypted = encrypter.decrypt64(_passValues.elementAt(0), iv: iv); print(_userPasswordInput); print(decrypted); if(decrypted == _userPasswordinput) { print("Passed"); } else { print("Failed"); }
问题原因
- 变量名大小写错误:验证逻辑里的判断条件使用的是
_userPasswordinput,但前面打印的变量是_userPasswordInput(最后一个字母I的大小写不一致),变量名不匹配直接导致比较结果为false。 - 加密解密参数不匹配:
- IV取值逻辑不一致:加密时IV是
key.substring(0,16),解密时直接用'key'作为IV,两者取值规则不同,会引发解密结果异常。 - Padding设置不一致:加密时AES使用默认的PKCS7填充,解密时明确设置
padding: null,填充方式不匹配会让解密后的字符串可能包含隐藏的多余填充字节,即使打印显示内容相同,实际底层字节存在差异,导致字符串比较失败。
- IV取值逻辑不一致:加密时IV是
内容的提问来源于stack exchange,提问作者HenryCollin
相关产品推荐
相关产品推荐

