java - 如何在X25519中为PrivateKey生成PublicKey?

标签 java cryptography public-key-encryption public-key elliptic-curve

我目前正在使用基于 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/

相关文章:

Java cookie 未添加到浏览器

java - 无法在 Tomcat 8 上部署 war 文件

javascript - 为什么这个密文总是以相同的字符开头?

android - 字符串比较加密和解密android中的 key

python - 在 Python 中从 .pfx 证书获取公钥

java - Domino 中的 SFTP/SSH Java 代理

c++ - 如何通过命令行参数分隔botan加密和解密操作?

javascript - 创建 C# 256 位 AES 加密,如 cryptoJS

android - 如何在从服务器端应用程序生成的 Android keystore 中存储和检索 RSA 公钥?

java - 从 Ldap 数据库(ApacheDs)获取 SHA 密码值