everyone! When I try to convert a java.security.PrivateKey object to an org.bouncycastle.asn1.pkcs.RSAPrivateKey object, like the code show.
void prvKey2BCRSAPrvKey() throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.genKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
System.out.println(privateKey.getAlgorithm());
RSAPrivateKey rsaPrivateKey = RSAPrivateKey.getInstance(privateKey.getEncoded());
System.out.println(rsaPrivateKey.getVersion());
}
I always get an error.
java.lang.ClassCastException: org.bouncycastle.asn1.DLSequence cannot be cast to org.bouncycastle.asn1.ASN1Integer
at org.bouncycastle.asn1.pkcs.RSAPrivateKey.(Unknown Source)
at org.bouncycastle.asn1.pkcs.RSAPrivateKey.getInstance(Unknown Source)
I know the problem is happening here.
RSAPrivateKey.getInstance(privateKey.getEncoded())
And more deep reason is in this function which is in org.bouncycastle.asn1.pkcs.RSAPrivateKey:
private RSAPrivateKey(ASN1Sequence var1) {
Enumeration var2 = var1.getObjects();
ASN1Integer var3 = (ASN1Integer)var2.nextElement();
int var4 = var3.intValueExact();
if (var4 >= 0 && var4 <= 1) {
this.version = var3.getValue();
this.modulus = ((ASN1Integer)var2.nextElement()).getValue();
this.publicExponent = ((ASN1Integer)var2.nextElement()).getValue();
this.privateExponent = ((ASN1Integer)var2.nextElement()).getValue();
this.prime1 = ((ASN1Integer)var2.nextElement()).getValue();
this.prime2 = ((ASN1Integer)var2.nextElement()).getValue();
this.exponent1 = ((ASN1Integer)var2.nextElement()).getValue();
this.exponent2 = ((ASN1Integer)var2.nextElement()).getValue();
this.coefficient = ((ASN1Integer)var2.nextElement()).getValue();
if (var2.hasMoreElements()) {
this.otherPrimeInfos = (ASN1Sequence)var2.nextElement();
}
} else {
throw new IllegalArgumentException("wrong version for RSA private key");
}
}
When the code runs here, it goes wrong.
ASN1Integer var3 = (ASN1Integer)var2.nextElement();
But I don't know how to fix it. It is some code I write is wrong? I use java1.8 and the BC dependent libraries is
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.70</version>
</dependency>
Someone can help me? Very very thanks!!!