我尝试了以下方法来生成具有2048位密钥长度的DSA私有(和公共)密钥:
通过keytool
keytool -genkeypair -alias MyKeyPair -keyalg DSA -keysize 2048 -validity 365 -keystore MyKeyStore.ks
导致:
keytool error: java.lang.IllegalArgumentException: Modulus size must range from 512
to 1024 and be a multiple of 64
通过代码
KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyAlgorithm,"BC");
keyGen.initialize(numBits);
导致:
Exception in thread "main" java.security.InvalidParameterException: strength must be from 512 - 1024 and a multiple of 64
at org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyPairGeneratorSpi.initialize(Unknown Source)
at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:340)
上面的例子使用了Bouncy Castle的实现,因为我读到的地方应该支持2048位的DSA密钥.我也尝试了具有相同错误的默认值.
我安装了(JCE)Unlimited Strength Jurisdiction Policy Files.
根据此输出,您可能希望有大键:
System.out.println("DSA Max key length: " + Cipher.getMaxAllowedKeyLength("DSA"));
DSA Max key length: 2147483647
但是,如果您在JCE Providers Docs中选择了Keysize限制,则1024位是最大值.
谁可以判断Java 7中是否支持2048位私钥?
或者,如果有另一种方法来创建此大小的密钥并将其导入Java密钥库?
Java 8 API赠送它将支持更大的键.所以我们可能需要等到明年.