Получить открытый или закрытый ключ RSA от KeyPair Generation Flutter - PullRequest
0 голосов
/ 08 марта 2019

Я добавил pointycastle и сгенерировал пару ключей, зашифровав пробную строку «Hello World». Из этого я хочу получить значения закрытого и открытого ключа. Где-нибудь они хранятся, потому что всякий раз, когда я пытаюсь напечатать значения keyPair.privateKey, он возвращает Instance of 'RSAPrivateKey.

Вот код, который я использовал

        var keyParams = new RSAKeyGeneratorParameters(new 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();
        var cipher = new RSAEngine()..init( true, new PublicKeyParameter<RSAPublicKey>(keyPair.publicKey));
        print("pubkey: ${keyPair.publicKey.toString()}");
        var cipherText = cipher.process(new Uint8List.fromList("Hello World".codeUnits));
        print("Encrypted: ${new String.fromCharCodes(cipherText)}");
        cipher.init( false, new PrivateKeyParameter<RSAPrivateKey>(keyPair.privateKey));
        //cipher.init( false, new PrivateKeyParameter(keyPair.privateKey) )
        var decrypted = cipher.process(cipherText);
        print("Decrypted: ${new String.fromCharCodes(decrypted)}");

1 Ответ

0 голосов
/ 08 марта 2019

Обязательно импортируйте package:pointycastle/asymmetric/api.dart, затем используйте:

  var k = RSAKeyGenerator()..init(rngParams);
  AsymmetricKeyPair<PublicKey, PrivateKey> keyPair = k.generateKeyPair();
  RSAPrivateKey privateKey = keyPair.privateKey;
  RSAPublicKey publicKey = keyPair.publicKey;
  print(privateKey.d); // prints private exponent
  print(publicKey.n); // prints modulus

Воссоздать из отдельных частей:

  RSAPrivateKey foo = RSAPrivateKey(
    privateKey.n,
    privateKey.d,
    privateKey.p,
    privateKey.q,
  );
  RSAPublicKey bar = RSAPublicKey(publicKey.n, publicKey.e);
...