我尝试使用pointy castle使用secp256k1曲线生成一个公共和私有的密钥对。我认为我已经成功地创建了一个由ecprivatekey和ecpublickey组成的非对称密钥对,但是我无法获得它们相应的十六进制字符串(类似于:
私人:
ee792658ceb1f8c3d2010ee6bc2ea328b584fbeccb17cf0f9103d122a8716,
公开:
041B3F87BEB2559AACA1C1D9EBB9447E4842D21CF0C70DB103ACC0DB27EA8C27536FC2B14055B8A16A460CA089B01DE8C556825927B4890B7236E357787F3E6D54)。
当我试图打印这些键时,我得到的只是“ecprivatekey实例”和“ecpublickey实例”,不管我是否使用.toString()。
我到处找了找办法,但找不到,有可能吗?
这是我的代码:

SecureRandom secureRandom = new SecureRandom("Fortuna");
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 domainParams = new ECDomainParameters("secp256k1");

var ecParams = new ECKeyGeneratorParameters(domainParams);
var params = new ParametersWithRandom<ECKeyGeneratorParameters>(
    ecParams, secureRandom);

var keyGenerator = new ECKeyGenerator();
keyGenerator.init(params);

AsymmetricKeyPair keypair = keyGenerator.generateKeyPair();

ECPrivateKey privateKey = keypair.privateKey;
ECPublicKey publicKey = keypair.publicKey;

print(privateKey);
print(privateKey.toString());

print(publicKey);
print(publicKey.toString());

最佳答案

私钥和公共点是各自密钥的成员变量:

  ECPrivateKey privateKey = keypair.privateKey;
  ECPublicKey publicKey = keypair.publicKey;

  // in decimal
  print(privateKey.d);
  print(publicKey.Q.x);
  print(publicKey.Q.y);

  // in hex
  print(privateKey.d.toRadixString(16));
  print(publicKey.Q.x.toBigInteger().toRadixString(16));
  print(publicKey.Q.y.toBigInteger().toRadixString(16));

10-08 16:34