Проблема здесь заключается в понимании разницы между x509.ParsePKCS1PublicKey
(PKCS # 1) и x509.ParsePKIXPublicKey
(PKCS # 8).
Обычно, когда заголовок PEM имеет тип RSA PUBLIC KEY
, этоссылаясь на открытый ключ RSA в кодировке PKCS # 1, который определен в RFC 8017 (PKCS # 1) как:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
Вы фактически не предоставили тело своего открытогоключ (это было бы безопасно), но вполне справедливо предположить, что если при декодировании ключа с использованием x509.ParsePKIXPublicKey
произошел сбой, ваш ключ, скорее всего, в указанном выше формате (x509.ParsePKIXPublicKey
использует кодировку PKCS # 8).
В этом случае вы сможете получить rsa.PublicKey
из файла, используя следующий код (не забудьте добавить обработку ошибок):
rawPem, _ := ioutil.ReadFile("./public.key")
pemBlock, _ := pem.Decode(rawPem)
publicKey, _ := x509.ParsePKCS1PublicKey(pemBlock.Bytes)
Если этоне решит вашу проблему, попробуйте вставить ключ, который у вас есть, в этот сайт , чтобы увидеть, какую структуру ASN.1 он использует.Для справки ключ, который я использовал для проверки этого, включен здесь:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApW1W9dnfdFF7FHrq6HPveR/9T+nM70yO7QOGytR0j/chMBJcJBjG
hJOuKPFbkVyS+BE/4M8CojLgvz4ex82Re0sFa5TqnoWvuP5P4vktR6M5W53sTW3y
gUnfF/oHcEmARQ1xKZdgVnlIfrdbpjecPyLi1Ng4HmhEfCFUOW64koxpb4XeH5O5
q+vc/731ExVOYBU8Sl6kPdjpJuVjS3DHKAVgfVEhscXd3JDjDuMDT3w1IYNb5c2s
wHE55q4Jnc1cr42jdynnkXzmuOGo2C6yD95kbBDLp7wSiBxaMA8gbRkzWJ99T+6l
KsKG2zfndMF3jZW1v1wWiEbYRN07qbN0NQIDAQAB
-----END RSA PUBLIC KEY-----