0

我使用以下 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 中的数据不是密钥对 - 但为什么呢?

4

1 回答 1

1

在将调试器带到 Bouncycastle 之后,我发现了“原因”,但这只会让我更加困惑;即使所有类型似乎都是正确的,演员表也失败了。

如果 A 扩展 B 扩展 C,为什么我可以转换为 A 但将 ClassCastException 转换为 C?

于 2011-04-12T11:36:15.423 回答