如何解密base 64字符串?



我将解释我的问题,我试图加密密码,然后将其保存在本地,以便我可以在必要时检索它,解密它并将其分配到我想要的任何地方。在加密阶段,我没有遇到任何问题,因为加密方法可以很容易地返回一个字符串,而在解密方法中,我有问题,因为返回类型似乎必须是encrypt类型。

通过这样做,我不可能去获取本地保存的字符串,感谢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是encrypt: ^5.0.1。谢谢。

我不熟悉package:encrypt,但浏览文档,您应该使用Encrypted.fromBase64构建一个Encrypted对象传递给Encrypter.decrypt:

static String decryptAES(String base64Text) {
print(base64Text);
String decrypted = encrypter.decrypt(Encrypted.fromBase64(base64Text), iv: iv);
print(decrypted);
return decrypted;
}

注意,您也应该只调用decryptAES(...),而不是decryptAES(...).base64。(您希望返回原始文本,而不是base64编码的版本。)

encryptedTextBase64 = encryptAES(SettingsPage.inputPassword).base64;
...
String decryptedText = decryptAES(encryptedTextBase64);
我要指出的是,您的代码非常难以理解(这对于与安全相关的代码尤其糟糕),因为:
  1. 你的函数没有声明参数类型和返回类型,因此接受和返回dynamic类型。这使得很难理解它们期望什么参数以及期望返回什么参数。
  2. 你应该命名你的变量,以明确哪些是base64编码的,哪些不是。(我在上面的例子中重命名了变量)

相关内容

  • 没有找到相关文章

最新更新