Я использую следующий код Python, используя M2Crypto, для генерации пары ключей RSA в формате PEM:
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 - не пара ключей - но почему?