当前位置: 首页 > 知识库问答 >
问题:

如何在flutter中的其他设备中加密字符串并解密此加密字符串?

濮阳旺
2023-03-14

我为flutter找到了加密包来加密和解密一条消息,我成功地加密和解密了,但没有成功地在一个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)

总之,我成功地对输入进行了自动加密和解密,但没有成功地将生成的密钥手动添加到解密函数中。

共有2个答案

令狐经武
2023-03-14

您可以使用此方法:

String encrypted = "68e4sg68es4ges68g4";
    
final decrypted = encrypter.decrypt(encrypt.Encrypted.fromBase64(encrypted),iv:iv);
袁成化
2023-03-14

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

在两台不同的机器之间使用加密系统时,您需要找到某种方式在它们之间共享密钥 - 所谓的“共享密钥”。例如,您可以使用 PKKDF2 从“密码短语”生成此密码。或者,您可以只是将随机字节字符串编译到代码中,但预计攻击者可能会对您的代码进行反向工程。

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

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

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

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

 类似资料:
  • 使用lib中的模块在python中解密和加密字符串。最简单的方法 现在我想解密我之前输入的字符串。。

  • 问题内容: 我正在通过Apache和Node.js服务器之间的不安全连接发送数据。我需要在PHP中加密数据并在Node.js中解密。我花了2天的时间使它正常工作,但是我只设法使消息签名正常工作,没有加密。我尝试将AES128-CBC,AES256-CBC,DES,AES128,AES256作为算法传递,但是效果不佳。 我在PHP中尝试过: 在Node.js中: 而且除了错误的解密数据外,我还会得到

  • 问题内容: 我的意思是: 也许像: 在PHP中,您该怎么做? 尝试使用 ,但对我不起作用。 问题答案: 更新 PHP 7就绪版本。它使用PHP OpenSSL库中的openssl_encrypt函数。

  • 我的意思是: 可能是这样的: null 尝试使用,但对我不起作用。

  • 我知道有几个与此相关的问题,但是大多数答案都提供了.NET4.0及以上版本的解决方案。对于我的用途,我必须以.NET3.5为目标。我想简单地加密和解密一个字符串存储在一个文件中,所讨论的文本不是敏感的用户/个人信息。

  • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl