Isso não é uma "chave pública formatada em PEM". Embora a blindagem externa seja semelhante à PEM, na verdade você tem um bloco de chaves PGP (semelhante ao objetivo dos certificados SSL X.509), e não uma chave RSA simples.
(Observe como a primeira linha diz que é uma "chave pública PGP". Os cabeçalhos esperados seriam BEGIN PUBLIC KEY
para PKCS # 7 ou BEGIN RSA PUBLIC KEY
para PEM / PKCS # 1.)
Na verdade, o bloco de chaves PGP nem tem uma chave RSA dentro - este contém chaves DSA e ElGamal. (O DSA é usado para fazer assinaturas digitais; ElGamal é um sistema de criptografia baseado em DH.)
É tecnicamente possível extrair os keypacks brutos do keyblock, mas isso não faz sentido aqui - se o destinatário usa PGP e espera descriptografar mensagens via PGP, então você também deve criptografá-los PGP. (Além disso, a ferramenta openssl
nem suporta trabalhar com o ElGamal mesmo assim.)
$ gpg < pub.txt gpg: armor header: Version: PGPfreeware 6.5.8 for non-commercial use <http://www.pgp.com> pub dsa1024/C5A457256335F34B 2001-01-29 uid netiva caftori sig C5A457256335F34B 2001-01-29 [selfsig] sub elg2048/9AF9DF1397F431A1 2001-01-29 sig C5A457256335F34B 2001-01-29 [keybind]
A maneira correta de usar este arquivo é importá-lo para o PGP, GnuPG ou uma ferramenta compatível:
$ gpg --import < pub.txt
$ echo "encrypt this" | gpg --armor --recipient C5A457256335F34B --encrypt
(Note, entretanto, que as chaves estão um pouco corrompidas - deve haver uma linha vazia após a linha "Version:". Você deve adicioná-la manualmente antes de tentar importar o keyblock.)