public_key:pem_entry_decode(Certificate)
возвращает Certificate
запись. Чтобы извлечь открытый ключ из него, вам необходимо загрузить определения записи. В оболочке Эрланга, введите следующую команду:
rr(public_key).
После загрузки определения записи в оболочку, возвращаемые значения будут содержать имена полей, а также значения полей, которые должны сделать вещи немного яснее.
В модуле Erlang, загрузите файл заголовка, как это:
-include_lib("public_key/include/public_key.hrl").
Затем вы можете извлечь информацию с открытым ключом, как это:
DecodedCertificate = public_key:pem_entry_decode(Certificate).
DecodedCertificate#'Certificate'.tbsCertificate#'TBSCertificate'.subjectPublicKeyInfo.
, который возвращает:
#'SubjectPublicKeyInfo'{
algorithm =
#'AlgorithmIdentifier'{
algorithm = {1,2,840,113549,1,1,1},
parameters = <<5,0>>},
subjectPublicKey =
<<48,130,2,10,2,130,2,1,0,195,76,200,181,90,146,51,183,
39,91,176,28,95,117,241,28,140,...>>}
Или выкопайте еще один уровень для получения самой клавиши:
DecodedCertificate#'Certificate'.tbsCertificate
#'TBSCertificate'.subjectPublicKeyInfo
#'SubjectPublicKeyInfo'.subjectPublicKey.
<<48,130,2,10,2,130,2,1,0,195,76,200,181,90,146,51,183,39,
91,176,28,95,117,241,28,140,212,223,132,...>>
Спасибо, что помогли мне. Остается только последний шаг, где вы декодируете открытый ключ и получаете тип rsa_public_key(), который вы должны использовать в public_key: decrypt_public/2. – Jeyhey
Существует вероятность того, что subjectPublicKey может быть '{0, KeyDer} = DecodedCertificate # 'Certificate'.tbsCertificate #' TBSCertificate'.subjectPublicKeyInfo # 'SubjectPublicKeyInfo'.subjectPublicKey.' Где KeyDer является Der кодировкой, если ключ имеет тип RSA 'RsaPublicKey = public_key: der_decode ('RSAPublicKey', KeyDer). Теперь RsaPublicKey имеет тип rsa_public_key() –