0

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()

そして、Bouncycastle を使用して、それを読み取ろうとする次の Java コード:

String signPem = ...;
PEMReader pemReader = new PEMReader(new StringReader(signPem));
Object signingKey = pemReader.readObject();

文字列は返されたsignPemものと同じです。bio.read()私が見ることができるデータは、2 つのプログラム間で変更されていません。-----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 に答える