我目前正在使用基于 X25519 key 的加密。
我的问题基本上是如何从现有的 X25519 PrivateKey
派生 PublicKey
?
我在XDHKeyPairGenerator
中找到了代码:
BigInteger publicKey = ops.computePublic(privateKey.clone());
但是这个包是特定于平台的,因此无法访问。而且我找不到通过可公开访问的接口(interface)来完成此操作的方法。
最佳答案
到目前为止,我只发现了一种通过 JDK 提供的接口(interface)来实现此目的的方法(不使用任何其他库,如 Bouncy CaSTLe 或 Google Tink):
public class StaticSecureRandom extends SecureRandom {
private final byte[] privateKey;
public StaticSecureRandom(byte[] privateKey) {
this.privateKey = privateKey.clone();
}
@Override
public void nextBytes(byte[] bytes) {
System.arraycopy(privateKey, 0, bytes, 0, privateKey.length);
}
}
public PublicKey generatePublicKeyFromPrivate(PrivateKey privateKey) throws GeneralSecurityException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(X25519);
keyPairGenerator.initialize(new NamedParameterSpec(X25519), new StaticSecureRandom(getScalar(privateKey)));
return keyPairGenerator.generateKeyPair().getPublic();
}
这不是一个非常优雅的解决方案,但它无需任何第三方库即可工作,而且我找不到任何其他方法。
关于java - 如何在X25519中为PrivateKey生成PublicKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583774/