如何生成公钥的专用密钥在X25519?

德米特罗·季托夫:

我与目前基于加密X25519密钥工作。

我的问题是,基本上,如何导出PublicKey从现有X25519 PrivateKey

我发现的代码XDHKeyPairGenerator

BigInteger publicKey = ops.computePublic(privateKey.clone());

但是,这个包是特定于平台的,因此无法访问。我找不到这样做通过公开访问接口的方法。

德米特罗·季托夫:

到目前为止,我发现只有一个办法通过JDK提供的接口来做到这一点(不使用像充气城堡或谷歌亭任何附加库):

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();
    }

这不是一个很优雅的解决方案,但它工作没有任何第三方库,我无法找到任何其他方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将 openssl 创建的 44 字节 x25519 公钥传递给需要 32 字节密钥长度的 CryptoKit

(C#) 在 (EC)DHE x25519 上使用私钥和公钥计算密钥份额

爪哇 - 如何生成专用密钥及公钥从密钥库开始(或.p12)

使用加密模块从node.js中的Curve25519(或X25519)非对称密钥对生成共享秘密密钥

公钥/私钥加密如何工作,由谁生成密钥对?

如何找到生成的openssl密钥的页眉和页脚以及公钥的值是多少

如何从pgp公钥生成.asc文件?

如何从私钥生成RSA公钥?

如何生成公钥/私钥(UNIX)

如何从其私钥生成ECDSA公钥?

如何为diffie hellman算法生成curve25519密钥对?

如何从Java中的公钥生成Tor服务洋葱地址?

如何使用 keytool 生成公钥证书和 .jks 文件?

Flutter-如何生成私钥/公钥对以加密消息

如何从节点js中的RSA公钥生成SKI?

如何访问 SecKeyCreateRandomKey() 生成的公钥中的字节?

如何获得公钥?

生成SSH密钥后立即出现权限被拒绝(公钥)错误

无法通过 SSH 连接到本地系统;错误(公钥,密码),SSH 密钥重新生成

从私钥生成Apache公钥

生成RSA公钥/私钥对

RSA公钥生成-Swift

如果对等公用密钥未编码为主机专用密钥,如何生成DH共享密钥?

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

在Java中,如何使用JKS密钥库中的X509证书(公用/专用密钥对)中的专用密钥解密?

获取GPG公钥的密钥签名/指纹

使用RSA公钥加密AES密钥

使用ECDH公钥进行密钥包装?

分离ECDSA密钥对的公钥和私钥