BC库ECPrivateKey ECPublicKey生成

Generate keys:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
kpg.initialize(new ECGenParameterSpec("secp521r1"), new SecureRandom());
KeyPair keyPair = kpg.generateKeyPair();
ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
byte[] privateKeyS = privateKey.getS().toByteArray();
byte[] publicKeyX = publicKey.getW().getAffineX().toByteArray();
byte[] publicKeyY = publicKey.getW().getAffineY().toByteArray();
String encodedPrivateKey = Base64.getEncoder().encodeToString(privateKeyS);
String encodedPublicKeyX = Base64.getEncoder().encodeToString(publicKeyX);
String encodedPublicKeyY = Base64.getEncoder().encodeToString(publicKeyY);
System.out.println("encodedPrivateKey = " + encodedPrivateKey);
System.out.println("encodedPublicKeyX = " + encodedPublicKeyX);
System.out.println("encodedPublicKeyY = " + encodedPublicKeyY);

The output:

encodedPrivateKey = AX0oM0IDnsCI4Ex1FPKrInc4paXZrHVYOjrVI3V+aNwlYvmeu8chj8o873GusofaLnehFYbmsDettUnRxnvLmV19 encodedPublicKeyX = AKSs6Yyi7c/oZtfc2uRM9kePKnCvI7+QVSJX4aauRGRnLscg5dSLE1AIQMigM+lNiUUfM4RuWUcmEqbXMqmjbDAZ encodedPublicKeyY = ANru7OLmipVjprfnFshiLi8tSDHbYrTpqKkpcRgQ75NxrdAd58cqcsjO7daBsGWgmuEDNB6so7JngyTcR5hPMT3k

Regenerating the keys:

byte[] privateKeyS = Base64.getDecoder().decode(encodedPrivateKey);
byte[] publicKeyX = Base64.getDecoder().decode(encodedPublicKeyX);
byte[] publicKeyY = Base64.getDecoder().decode(encodedPublicKeyY);
ECPoint pubPoint = new ECPoint(new BigInteger(1, publicKeyX), new BigInteger(1, publicKeyY));
AlgorithmParameters parameters = AlgorithmParameters.getInstance("EC");
parameters.init(new ECGenParameterSpec("secp521r1"));
ECParameterSpec ecParameters = parameters.getParameterSpec(ECParameterSpec.class);
ECPublicKeySpec pubSpec = new ECPublicKeySpec(pubPoint, ecParameters);
ECPrivateKeySpec privateSpec = new ECPrivateKeySpec(new BigInteger(1, privateKeyS), ecParameters);
KeyFactory kf = KeyFactory.getInstance("EC");
ECPrivateKey privateKey = (ECPrivateKey) kf.generatePrivate(privateSpec);
ECPublicKey publicKey = (ECPublicKey) kf.generatePublic(pubSpec);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值