繁体   English   中英

为什么Bouncycastle的PEMReader无法读取此M2Crypto生成的PEM?

[英]Why can't Bouncycastle's PEMReader read this M2Crypto-generated PEM?

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

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

下面的Java代码使用Bouncycastle尝试读取它:

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?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM