为什么Bouncycastle的PEMReader不能读取这个M2Crypto生成的PEM?

时间:2011-04-11 14:55:58

标签: java python encryption bouncycastle m2crypto

我使用以下Python代码,使用M2Crypto,以PEM格式生成RSA密钥对:

bio = BIO.MemoryBuffer()
key_pair = RSA.gen_key(1024, 65537)
key_pair.save_key_bio(bio, cipher=None)
return bio.read()

以下使用Bouncycastle的Java代码尝试阅读它:

String signPem = ...;
PEMReader pemReader = new PEMReader(new StringReader(signPem));
Object signingKey = pemReader.readObject();

signPem字符串与bio.read()返回的字符串相同;没有我能看到的数据是在两个程序之间传播的;它是-----BEGIN RSA PRIVATE KEY-----\n等。

但是,readObject()调用会抛出ClassCastException:

java.lang.ClassCastException: org.bouncycastle.asn1.DERSequence
    at org.bouncycastle.asn1.ASN1Object.fromByteArray(Unknown Source)
    at org.bouncycastle.openssl.PEMReader.readKeyPair(Unknown Source)
    at org.bouncycastle.openssl.PEMReader.readObject(Unknown Source)

显然,BC错误地认定PEM中的数据由于某种原因不是关键对 - 但为什么呢?

1 个答案:

答案 0 :(得分:1)

将调试器带到Bouncycastle之后,我发现了“原因”,但它只会让我感到困惑;即使所有类型看起来都是正确的,演员也会失败。

If A extends B extends C, why can I cast to A but get a ClassCastException casting to C?