我使用以下 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)
所以很明显 BC 出于某种原因错误地识别了 PEM 中的数据不是密钥对 - 但为什么呢?