[ad_1]
こんにちは、MySQL db (BLOB 列に格納されている) からテキストを復号化しようとしていますが、この問題に遭遇しました。その値を復号化しようとすると、次のエラーが発生しました。
Unhandled Exception: type 'String' is not a subtype of type 'Encrypted' in type cast
このエラーは明らかに、戻り値が暗号化されておらず、実際には文字列であるため発生しますが、なぜでしょうか? 取得した値のデータ型が文字列になったのはなぜですか? 暗号化されていませんか?
これは、値が暗号化された方法です
var _encryptCustString = EncryptionModel().aesEncrypt(mykey,"somestring"); var _tobase64 = _encryptCustString.base64;
値の取得方法と復号化方法
var _getString = await conn.execute("SELECT CustString FROM information WHERE CUST_USERNAME = :username", { "username": custUsername }); Encryption.Encrypted? _valueEnc = null; for(var _userPass in _getPass.rows) { dynamic _getValue = _userPass.assoc()['CustString']; _valueEnc = _getValue; var decryptedCust = EncryptionModel().aesDecrypt(mykey,_valueEnc!);
EncryptionModel クラス
import 'package:encrypt/encrypt.dart' as encrypter; class EncryptionModel { encrypter.Encrypted aesEncrypt(String key, var Value) { 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); // dynamic _toEncrypted = _encryptDat.base64; return _encryptDat; } Object aesDecrypt(String key, encrypter.Encrypted EncValue) { var _decryptedObj; 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)); final _getDecrypt = encryptServ.decrypt(EncValue, iv: InitVect); _decryptedObj = _getDecrypt; return _getDecrypt; } }
私が試したこと:
(エラーを返します)
Encryption.Encrypted? _valueEnc = null; for(var _userPass in _getPass.rows) { dynamic _getValue = _userPass.assoc()['CUST_PASSWORD'] as Encryption.Encrypted; _valueEnc = _getValue; var decryptedCust = EncryptionModel().aesDecrypt("0123456789085746",_valueEnc!);
解決策 1
見つかったドキュメントによると ここ、次のことを試してください –
var source = 'flutter app'; final decrypted = encrypter.decrypt64(source, iv: iv);
通常の直接復号化では、次のように復号化メソッドを直接使用できます。
final plainText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'; final iv = IV.fromLength(8); final encrypter = Encrypter(Salsa20(key)); final encrypted = encrypter.encrypt(plainText, iv: iv); final decrypted = encrypter.decrypt(encrypted, iv: iv);
上記のように見つかった解決策もあります ここに
[ad_2]
コメント