目前我需要为 GOST 34.10-2001 签名算法生成一个密钥对。很高兴发现充气城堡提供者支持此算法,但我无法生成密钥对并将其保存到任何类型的任何密钥库。keyalg
目前我尝试了这个命令(如果isDSA
和 sigalg is ,这个命令很好用SHA1withDSA
):
keytool -genkey -alias test1 -keyalg ECGOST3410 -keysize 512 -sigalg GOST3411withECGOST3410 \
-keypass test_1 -validity 1000 -storetype JKS -keystore test1.jks -storepass test_1 -v \
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-1.46.jar"
但我有一个错误:
keytool error: java.lang.IllegalArgumentException: unknown key size.
java.lang.IllegalArgumentException: unknown key size.
at sun.security.x509.CertAndKeyGen.generate(CertAndKeyGen.java:134)
at sun.security.tools.KeyTool.doGenKeyPair(KeyTool.java:1156)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:786)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
keysize
当我尝试从命令中操作 keysize 或删除选项时,我可以看到完全相同的错误。但是有一些特殊情况。当我设置keysize
为256
我有另一个错误:
keytool error: java.lang.IllegalArgumentException: key size not configurable.
java.lang.IllegalArgumentException: key size not configurable.
at sun.security.x509.CertAndKeyGen.generate(CertAndKeyGen.java:134)
at sun.security.tools.KeyTool.doGenKeyPair(KeyTool.java:1156)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:786)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
目前我不知道如何生成密钥对以及如何将其保存到密钥库。此外,我还有一些可以为 GOST 34.10-2001 算法生成密钥对的 java 代码:
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECGOST3410", "BC");
kpg.initialize(new ECGenParameterSpec("GostR3410-2001-CryptoPro-A"));
KeyPair kp = kpg.generateKeyPair();
此代码示例使用ECGenParameterSpec
类来初始化密钥对生成器,所以我应该以某种方式将它提供给 keytool(-providerArg provider_arg
或-Jjavaoption
)吗?
PS 我认为我应该提供曲线名称作为一些参数,但我无法确定我应该使用什么参数。