serg.nechaev:
:これは、このウェブサイトからHEX文字列からJavaでのPrivateKeyオブジェクトを作成するための正しい方法である場合、私は疑問に思ってhttps://kjur.github.io/jsrsasign/sample/sample-ecdsa.html
HEX文字列からの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;
}
}
rustyx:
はい、それは正しいです、EC秘密鍵は単なる数です。あなたをプリントアウトした場合PrivateKey
、あなたは対応する公開鍵のXとY座標が表示されます。
たとえば、のは、(次のキーのペアが生成されたとしましょう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ポイントタグです)。