首页 > 解决方案 > 如何生成私钥/公钥对来加密消息

问题描述

我需要在我的颤振应用程序中生成一个密钥对,但似乎没有任何库可以这样做。有一个名为RSA的库可以解析一对公钥/私钥,并能够使用它们加密和解密字符串,但它无法生成新的 KeyPair(最好从给定的字符串中生成)。

我如何首先生成密钥?我错过了什么吗?

标签: androiddartcryptographyflutterpublic-key-encryption

解决方案


我开始使用一些示例代码来使用尖城堡生成公钥/私钥对。经过长时间的调试和编辑代码,我最终得到了以下代码:

  var keyParams = new RSAKeyGeneratorParameters(BigInt.from(65537), 2048, 5);

  var secureRandom = new FortunaRandom();
  var random = new Random.secure();

  List<int> seeds = [];
  for (int i = 0; i < 32; i++) {
    seeds.add(random.nextInt(255));
  }


  secureRandom.seed(new KeyParameter(new Uint8List.fromList(seeds)));

  var rngParams = new ParametersWithRandom(keyParams, secureRandom);
  var k = new RSAKeyGenerator();
  k.init(rngParams);

  var keyPair = k.generateKeyPair();

  print(new RsaKeyHelper().encodePublicKeyToPem(keyPair.publicKey) );
  print(new RsaKeyHelper().encodePrivateKeyToPem(keyPair.privateKey) );

  AsymmetricKeyParameter<RSAPublicKey> keyParametersPublic = new PublicKeyParameter(keyPair.publicKey);
  var cipher = new RSAEngine()..init(true, keyParametersPublic);

  var cipherText = cipher.process(new Uint8List.fromList("Hello World".codeUnits));

  print("Encrypted: ${new String.fromCharCodes(cipherText)}");

  AsymmetricKeyParameter<RSAPrivateKey> keyParametersPrivate = new PrivateKeyParameter(keyPair.privateKey);

  cipher.init( false, keyParametersPrivate )
  ;
  var decrypted = cipher.process(cipherText);
  print("Decrypted: ${new String.fromCharCodes(decrypted)}");

我从这个 git issue page使用了这个人的编辑(在此处查找更多功能,例如从 PEM 编码/解码


推荐阅读