【发布时间】:2021-10-14 16:40:00
【问题描述】:
我将解释我的问题,我正在尝试加密密码,然后将其保存在本地,以便我可以在必要时去检索它,解密它并将其分配到我想要的任何地方。 在加密阶段我没有遇到任何问题,因为加密方法可以轻松返回字符串,而在解密方法中我有问题,因为返回类型似乎必须是加密类型。
通过这样做,我不可能通过 sharedPreferences 将字符串保存在本地并能够解密它,我将提供以下代码以更好地理解我的问题:
class _State extends State<SettingsPage> {
static final key = encrypt.Key.fromLength(32);
static final iv = encrypt.IV.fromLength(16);
static final encrypter = encrypt.Encrypter(encrypt.AES(key));
static encryptAES(text) {
final encrypted = encrypter.encrypt(text, iv: iv);
return encrypted;
}
static decryptAES(text) {
print(text.base64);
String decrypted = encrypter.decrypt(text, iv: iv);
print(decrypted);
return decrypted;
}
SettingsPage.inputPassword = input[0];
// SettingsPage.inputPassword = tec.text;
encryptedText = encryptAES(SettingsPage.inputPassword).base64;
setState(() {
String encryptedText =
encryptAES(SettingsPage.inputPassword).base64;
print("PROVA ENCRYPTED TEXT " + encryptedText);
});
prefs.setString('savedPass', encryptedText.base64);
String decryptedText = decryptAES(encryptedText).base64;
print("PROVA TESTO DECRIPTATO " + decryptedText);
}
},
一切都按要求进行,直到密码被保存,然后我问你如何解密一个字符串,以便能够正确地将变量 DecryptedText 分配给 String 变量,因为此时我被告知:
Unhandled Exception: NoSuchMethodError: Class 'String' has no instance getter 'base64'.
这是因为解密的方法似乎只能返回一个 Encrypt 类型。 使用的 pub.dev API 是加密的:^5.0.1。 谢谢。
【问题讨论】:
-
你为什么要这样做?
-
我需要解密它才能在登录时使用它。
-
您认为这是一个安全的解决方案吗?你不能使用某种 api_token 之类的吗?
-
为什么它不应该是一个安全的解决方案?我不知道该怎么做我问...
-
要将 Base64 编码的密文转换为
Encrypted对象,只需使用Encrypted.from64()。
标签: flutter dart encryption mobile