web-dev-qa-db-ja.com

Flutter-メッセージを暗号化するための秘密鍵と公開鍵のペアを生成する方法

Flutterアプリでキーペアを生成する必要がありますが、それを行うためのライブラリーがないようです。 [〜#〜] rsa [〜#〜] と呼ばれるライブラリが1つあります。これは、公開鍵と秘密鍵のペアを解析し、それらを使用して文字列を暗号化および復号化できますが、 (できれば与えられた文字列から)新しいKeyPairを生成する機能。

最初にどのようにしてキーを生成できますか?何か不足していますか?

7
Shamshun

Dart2およびFlutter互換のプレリリース Pointycastle が利用可能です。

デフォルトのREADME.mdは最初の非プレリリースバージョンを指しているため、フロントページには「Dart 2 INCOMPATIBLE」と表示されますが、これはバージョン< 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

2

先のとがった城を使用して公開鍵/秘密鍵のペアを生成するためのサンプルコードを使い始めました。コードのデバッグと編集に長時間を費やした後、私は次のコードで終わってしまいました。

  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)}");

私は this git issue page からこの男の編集を使用しました=( PEMへのエンコード/デコードなどのその他の関数についてはこちらをご覧ください

2
Shamshun