android - 如何生成私钥/公钥对来加密消息
问题描述
我需要在我的颤振应用程序中生成一个密钥对,但似乎没有任何库可以这样做。有一个名为RSA的库可以解析一对公钥/私钥,并能够使用它们加密和解密字符串,但它无法生成新的 KeyPair(最好从给定的字符串中生成)。
我如何首先生成密钥?我错过了什么吗?
解决方案
我开始使用一些示例代码来使用尖城堡生成公钥/私钥对。经过长时间的调试和编辑代码,我最终得到了以下代码:
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)}");
推荐阅读
- c++ - 方便的 Vector3f 类
- string - 如何剖析和解析lua中的字符串?
- perl - 如何使用 HTML::TreeBuilder::XPath 循环 findnodes() 的结果
- python - HTTP服务器启动后台python脚本无阻塞
- datetime - 如何使用 DateTimeFormatter 忽略毫秒和格式
- javascript - Firebase 实时数据库 - 在迭代数组时获取数据
- excel - 包括 SUB 而 .SAVEAS
- matlab - 预测 SVM 回归的测试样本响应
- python - python清理文本数据
- node.js - 当用户从数据库中删除时删除帖子