目前,我正在使用基于X25519密钥的加密。
我的问题是,基本上,如何从现有的X25519 PublicKey
导出PrivateKey
?
我在XDHKeyPairGenerator
中找到了代码:
BigInteger publicKey = ops.computePublic(privateKey.clone());
但是此程序包是特定于平台的,因此无法访问。而且我找不到通过公开访问的界面来实现此目的的方法。
最佳答案
您必须将私钥(只是一个很大的数字)与25519曲线生成器点进行标量乘积。
这是python中的一些代码来说明:
from tinyec import registry
import secrets
curve = registry.get_curve('curve25519')
def compress_point(point):
return hex(point.x) + hex(point.y % 2)[2:]
privKey = secrets.randbelow(curve.field.n)
pubKey = privKey * curve.g //the key step for you...
print("private key:", hex(privKey))
print("public key:", compress_point(pubKey))
如果您让我知道Java库,我会尽力帮助您。