为什么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()
然后我用下面的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)
所以很明显,Bouncycastle错误地识别了PEM中的数据,认为这不是一个密钥对——但这是为什么呢?
1 个回答
1
在用调试工具查看Bouncycastle的时候,我发现了“原因”,但这让我更加困惑;虽然所有的类型看起来都没问题,但类型转换还是失败了。