我找到了用于 flutter 的 encrypt 包来加密和解密消息,我成功地加密和解密,但没有成功地在如图所示的分离设备的 cas 中使用它。
这是一个例子,我用一个静态字符串和一个随机数组成一个纯文本,它允许更改生成的密钥,当我解密时,发现静态字符串与正则表达式匹配
var number = new Random();
var random= number.nextInt(100);
final plainText = 'static_name$random';
final key = Key.fromLength(16);
final iv = IV.fromLength(8);
final encrypter = Encrypter(AES(key));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(encrypted.base64);//my plaintext is encrypted fesesgesgneslg465esg6es4g
print(decrypted); //my random plaintext is decrypted static_name$rnd
//my regex match function
目前我没有找到如何输入我的加密密钥 (fesesgesgneslg465esg6es4g) 我搜索做类似的事情
//---------按下我生成一个我加密的随机密钥---- var rng = new Random();
var rnd= rng.nextInt(100); //choisir le nombre max de contenu de la catégorie
final plainText = 'static_name$rnd';
final key = Key.fromLength(16);
final iv = IV.fromLength(8);
final encrypter = Encrypter(AES(key));
final encrypted = encrypter.encrypt(plainText, iv: iv);
//output : 68e4sg68es4ges68g4
//---------用户在第二个设备上输入密钥(68e4sg68es4ges68g4) ----
encrypted=68e4sg68es4ges68g4;
final key = Key.fromLength(16);
final iv = IV.fromLength(8);
final encrypter = Encrypter(AES(key));
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(decrypted);
我找不到如何解密我的密钥 (68e4sg68es4ges68g4)
简而言之,我成功地对输入进行了自动加密和解密,但没有成功地将生成的密钥手动添加到解密函数中。
您尝试使用该encrypt
软件包的方式存在严重问题。通过使用,Key.forLength()
您基本上是在使用0000000....000
. IV 也一样。这不是一个非常安全的密钥!
在两台不同的机器之间使用加密系统时,您需要找到某种方式在它们之间共享密钥 - 所谓的“共享秘密”。您可以使用例如 PKKDF2 从“密码短语”生成它。或者您可以将随机字节字符串编译到代码中,但预计攻击者可以对您的代码进行逆向工程。
使用 AES,您不应该使用相同的密钥两次使用相同的 IV,这就是为什么密码系统通常在密钥交换期间唯一地生成密钥和初始 IV,然后使用某些东西(如消息序列号)来更改 IV 的原因用那个密钥加密的每条消息。
出于测试目的,像你这样的,你可能要产生一个固定的16位密钥,并使用随机数生成固定的16位四本。然后使用.fromBase64()
构造函数。
var key = Key.fromBase64('yE9tgqNxWcYDTSPNM+EGQw=='); // obviously, insert your own value!
var iv = IV.fromBase64('8PzGKSMLuqSm0MVbviaWHA==');
在加密和解密应用程序中对 key 和 IV 使用相同的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句