获取此错误:
java.security.InvalidAlgorithmParameterException:
无支撑曲线: secp256k1 (1.3.132.0.10)
有什么方法可以在eclipse中使用secp256k1吗?我找不到任何帮助。如何使用secp256k1生成椭圆曲线的公钥和私钥对?
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.*;
public class ECCKeyGeneration {
public static void main(String[] args) {
try {
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecsp;
ecsp = new ECGenParameterSpec("secp256k1");
kpg.initialize(ecsp);
KeyPair kp = kpg.genKeyPair();
PrivateKey privKey = kp.getPrivate();
PublicKey pubKey = kp.getPublic();
System.out.println(privKey.toString());
System.out.println(pubKey.toString());
} catch (Exception ex) {
System.out.println(ex);
}
}
}发布于 2020-10-10 21:49:36
通常,这个问题取决于Java版本,而不是Eclipse。请运行下面的程序(稍微编辑你的版本),并给我们的版本,运行在您的机器上。
这是一个在线编译器的输出(直接链接:https://repl.it/@javacrypto/JavaEllipticCurveAvailable)
Java Version: main: 11 major: 0 minor: 8+10-post-Ubuntu-0ubuntu118 update: 04 build: 1
sun.security.ec.ECPrivateKeyImpl@5403
Sun EC public key, 256 bits
public x coord: 40409384899581786570368833959823834602401842042090899775653557207593518019107
public y coord: 55894232296453671204408524113424724230763480655586911101265852946730642819727
parameters: secp256k1 (1.3.132.0.10)代码:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.*;
public class Main {
public static void main(String[] args) {
System.out.println("Java Version: " + getJavaVersion());
try {
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecsp;
ecsp = new ECGenParameterSpec("secp256k1");
kpg.initialize(ecsp);
KeyPair kp = kpg.genKeyPair();
PrivateKey privKey = kp.getPrivate();
PublicKey pubKey = kp.getPublic();
System.out.println(privKey.toString());
System.out.println(pubKey.toString());
} catch (Exception ex) {
System.out.println(ex);
}
}
public static String getJavaVersion() {
String[] javaVersionElements = System.getProperty("java.runtime.version").split("\\.|_|-b");
String main = "", major = "", minor = "", update = "", build = "";
int elementsSize = javaVersionElements.length;
if (elementsSize > 0) {main = javaVersionElements[0];}
if (elementsSize > 1) {major = javaVersionElements[1];}
if (elementsSize > 2) {minor = javaVersionElements[2];}
if (elementsSize > 3) {update = javaVersionElements[3];}
if (elementsSize > 4) {build = javaVersionElements[4];}
return "main: " + main + " major: " + major + " minor: " + minor + " update: " + update + " build: " + build;
}
}发布于 2022-07-08 23:14:42
//特定的可靠提供者,甚至可以使用java 17+。
KeyPairGenerator.getInstance("EC", "BC")
发布于 2022-08-22 12:55:55
我正在使用。
最低要求- OpenJDK版本11.0.5
public static void main(String[] args)
throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec m = new ECGenParameterSpec("secp256k1");
kpg.initialize(m);
ECPrivateKey privateKey = (ECPrivateKey) kpg.generateKeyPair().getPrivate();
ECPublicKey publicKey = (ECPublicKey) kpg.generateKeyPair().getPublic();
System.out.println("Base64 encoded private key : " + Base64.getEncoder().encodeToString(privateKey.getEncoded()));
System.out.println("Base64 encoded public key : " + Base64.getEncoder().encodeToString(publicKey.getEncoded()));
}https://stackoverflow.com/questions/64298440
复制相似问题