Encryption flatter,RSA使用两个私钥解密

Encryption flatter,RSA使用两个私钥解密,encryption,flutter,dart,rsa,end-to-end,Encryption,Flutter,Dart,Rsa,End To End,我在寻找一种在我的Flitter应用程序中实现端到端加密的方法。我可以生成密钥对,加密和解密字符串,但我需要一种用两个单独的私钥解密字符串的方法 示例:我希望Alice加密一条消息并将其发送给Bob(显然Bob将使用他的私钥解密),但加密后的消息将存储在数据库中,因此Alice在加密后无法查看她的消息 以下是加密和解密字符串的函数: String encrypt(String plaintext, RSAPublicKey publicKey) { var cipher = new RSAE

我在寻找一种在我的Flitter应用程序中实现端到端加密的方法。我可以生成密钥对,加密和解密字符串,但我需要一种用两个单独的私钥解密字符串的方法

示例:我希望Alice加密一条消息并将其发送给Bob(显然Bob将使用他的私钥解密),但加密后的消息将存储在数据库中,因此Alice在加密后无法查看她的消息

以下是加密和解密字符串的函数:

String encrypt(String plaintext, RSAPublicKey publicKey) {
  var cipher = new RSAEngine()
    ..init(true, new PublicKeyParameter<RSAPublicKey>(publicKey));
  var cipherText = cipher.process(new Uint8List.fromList(plaintext.codeUnits));

  return new String.fromCharCodes(cipherText);
}

String decrypt(String ciphertext, RSAPrivateKey privateKey) {
  var cipher = new RSAEngine()
    ..init(false, new PrivateKeyParameter<RSAPrivateKey>(privateKey));
  var decrypted = cipher.process(new Uint8List.fromList(ciphertext.codeUnits));

  return new String.fromCharCodes(decrypted);
}
字符串加密(字符串明文,rsaplickey公钥){
var cipher=new RSAEngine()
..init(真,新公钥参数(公钥));
var cipherText=cipher.process(新的Uint8List.fromList(plaintext.codeUnits));
返回新字符串.fromCharCodes(密文);
}
字符串解密(字符串密文,RSAPrivateKey privateKey){
var cipher=new RSAEngine()
..init(false,新privateKey参数(privateKey));
var decrypted=cipher.process(新的Uint8List.fromList(ciphertext.codeUnits));
返回新字符串.fromCharCodes(已解密);
}

听起来您需要像Diffe Hellman这样的密钥协议方案。Alice和Bob可以从他们的私钥和另一方的公钥中导出共享密钥。只有Alice或Bob可以加密或解密,因为只有他们知道一个私钥和一个公钥。因此,Alice在加密后无法看到她的消息。。。那么,如果你只对bob加密,为什么你需要两个私钥才能解密消息呢?@JamesReinstateMonicaPolk我正在创建聊天应用程序,因此如果我存储加密消息,bob可以从数据库获取消息并解密,但alice无法做到。你很接近了。你真正应该使用的是。生成AES-GCM密钥k,并使用带有密钥k的AES-GCM对消息进行加密。然后使用bob的公钥加密k,然后再次使用alice的公钥加密k。然后将这三个部分连接在一起,并将其作为加密消息发送/存储。Bob不生成密钥,Alice生成密钥。因此,如果AES(k,M)是使用AES和密钥k对消息M进行加密,而RSA_E(person,k)是使用RSA和person的公钥对密钥k进行加密,那么Alice创建、发送给Bob并保存在数据库中的最终加密消息是RSA_E(Alice,k)concat RSA_E(Bob,k)concat AES(k,M)。Bob不需要生成k,而是通过使用私钥解密RSA_E(Bob,k)来恢复k。爱丽丝也能做到这一点。