gpt4 book ai didi

java - 从十六进制字符串创建 EC 私钥

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:17 29 4
gpt4 key购买 nike

我想知道这是否是从本网站的 HEX 字符串在 Java 中创建 PrivateKey 对象的正确方法:https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html

从十六进制字符串创建一个 BigInteger:

BigInteger priv = new BigInteger(privateKeyFromSite, 16);

并传递给这个方法:

import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;

import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.spec.ECParameterSpec;
import org.bouncycastle.jce.spec.ECPrivateKeySpec;


public static PrivateKey getPrivateKeyFromECBigIntAndCurve(BigInteger s, String curveName) {

ECParameterSpec ecParameterSpec = ECNamedCurveTable.getParameterSpec(curveName);

ECPrivateKeySpec privateKeySpec = new ECPrivateKeySpec(s, ecParameterSpec);
try {
KeyFactory keyFactory = KeyFactory.getInstance(EC);
return keyFactory.generatePrivate(privateKeySpec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
return null;
}
}

最佳答案

是的,没错,EC 私钥只是一个数字。如果你打印出你的 PrivateKey ,您将看到相应公钥的 X 和 Y 坐标。

例如,假设生成了以下 key 对 ( secp256r1 ):

  • EC 私钥:
    1b9cdf53588f99cea61c6482c4549b0316bafde19f76851940d71babaec5e569

  • EC 公钥:
    0458ff2cd70c9a0897eb90a7c43d6a656bd76bb8089d52c259db6d9a45bfb37eb9882521c3b1e20a8bae181233b939174ee95e12a47bf62f41a62f1a20381a6f03

我们将私钥字节插入到您的函数中:

BigInteger priv = new BigInteger("1b9cdf53588f99cea61c6482c4549b0316bafde19f76851940d71babaec5e569", 16);
PrivateKey privateKey = getPrivateKeyFromECBigIntAndCurve(priv, "secp256r1");
System.out.println(privateKey);

并打印出来:

EC Private Key [91:05:8a:28:94:f9:5c:cb:c4:34:b8:69:e4:39:d4:57:59:c7:51:35]
X: 58ff2cd70c9a0897eb90a7c43d6a656bd76bb8089d52c259db6d9a45bfb37eb9
Y: 882521c3b1e20a8bae181233b939174ee95e12a47bf62f41a62f1a20381a6f03

如您所见,如果您连接 04 + X + Y,你会得到原始的公钥,(04是未压缩的EC点标签)。

关于java - 从十六进制字符串创建 EC 私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004341/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com