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 内のデータが何らかの理由でキー ペアではないと誤認しますが、なぜでしょうか?