gpt4 book ai didi

encryption - 如何加密字符串并在其他设备中解密这个加密的字符串?

转载 作者:IT王子 更新时间:2023-10-29 07:16:51 25 4
gpt4 key购买 nike

enter image description here

我找到了用于 flutter 加密和解密消息的加密包,我成功地加密和解密,但没有成功地在如图所示的分离设备的 cas 中使用它。

这是一个例子,我用一个静态字符串和一个随机数组成一个明文,它允许更改生成的 key ,当我解密时,找到与正则表达式匹配的静态字符串

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

目前我找不到如何输入我的加密 key (fesesgesgneslg465esg6es4g) 我想做类似的事情

//--------按下我生成一个我加密的随 secret 钥---- 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

//--------用户在第二台设备上输入 key (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);

我找不到如何解密我的 key (68e4sg68es4ges68g4)

简而言之,我成功地自动加密和解密了一个输入,但没有成功地将生成的 key 手动添加到解密函数中。

最佳答案

您尝试使用 encrypt 包的方式存在严重问题。通过使用 Key.forLength(),您基本上是在使用 0000000....000 的 key 。 IV 也一样。这不是一个非常安全的 key !

在两台不同的机器之间使用加密系统时,您需要找到某种方式在它们之间共享 key ——所谓的“共享 secret ”。您可以使用例如 PKKDF2 从“密码”生成它。或者您可以将一个随机字节字符串编译到代码中,但期望攻击者可以对您的代码进行逆向工程。

使用 AES,您不应该使用相同的 key 两次使用相同的 IV,这就是为什么密码系统通常在 key 交换期间生成唯一的 key 和初始 IV,然后使用某些东西(如消息序列号)来更改使用该 key 加密的每条消息的 IV。

出于测试目的,像您一样,您可能希望使用像 this 这样的随机数生成器生成一个固定的 16 位 key 和固定的 16 位 IV .然后使用 .fromBase64() 构造函数。

var key = Key.fromBase64('yE9tgqNxWcYDTSPNM+EGQw=='); // obviously, insert your own value!
var iv = IV.fromBase64('8PzGKSMLuqSm0MVbviaWHA==');

在加密和解密应用程序中对 key 和 IV 使用相同的值。

关于encryption - 如何加密字符串并在其他设备中解密这个加密的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com