Почему PounReader Bouncycastle не может прочитать этот сгенерированный M2Crypto PEM? - PullRequest
0 голосов
/ 11 апреля 2011

Я использую следующий код 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 - не пара ключей - но почему?

1 Ответ

1 голос
/ 12 апреля 2011

После того, как я взял отладчик в Bouncycastle, я обнаружил «причину», но это только озадачивает меня; приведение не выполняется, хотя все типы кажутся правильными.

Если A расширяет B, расширяет C, почему я могу привести к A, но получить приведение ClassCastException к C?

...