Flutter - Как я могу сгенерировать пару секретный / открытый ключ для шифрования сообщений - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно сгенерировать пару ключей в моем приложении, но, похоже, нет библиотек для этого.Существует одна библиотека с именем RSA , которая анализирует пару открытых / закрытых ключей и может шифровать и дешифровать строки, используя их;но у него нет возможности генерировать новую пару ключей (желательно из заданной строки).

Как я могу сгенерировать ключи в первую очередь?Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я начал использовать пример кода для генерации пары открытый ключ / закрытый ключ с использованием заостренных замков.После долгого времени отладки и редактирования кода я получил следующий код:

  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 ( Ищите здесьнекоторые другие функции, такие как кодирование / декодирование из PEM

0 голосов
/ 08 октября 2018

Доступен предварительный выпуск, совместимый с Dart2 и Flutter Pointycastle .

По умолчанию README.md указывает на первую не-предварительную версию, и поэтому на первой странице отображается "DART 2 INOMPATIBLE ", но это применимо только к версии < 0.11.1.

Просто добавьте к pubspec.yaml

dependencies: 
  pointycastle: ^1.0.0-rc4

Например, проверьте модульные тесты https://github.com/PointyCastle/pointycastle/blob/master/test/key_generators/rsa_key_generator_test.dart

...