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

我使用以下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中的数据由于某种原因不是关键对 - 但为什么呢?     
已邀请:
在将调试器带到Bouncycastle之后,我发现了“原因”,但它只会让我更加困惑;即使所有类型看起来都是正确的,演员也会失败。 如果A扩展B扩展C,为什么我可以转换为A但是得到一个ClassCastException转换为C?     

要回复问题请先登录注册