public_key:pem_entry_decode(Certificate)
renvoie un enregistrement Certificate
. Pour en extraire la clé publique, vous devez charger les définitions d'enregistrement. Dans le shell Erlang, tapez:
rr(public_key).
Après avoir chargé les définitions d'enregistrement dans la coquille, renvoient des valeurs contiennent les noms de champs, ainsi que les valeurs de champ, ce qui devrait rendre les choses un peu plus clair.
Dans un module Erlang, chargez le fichier d'en-tête comme ceci:
-include_lib("public_key/include/public_key.hrl").
Ensuite, vous pouvez extraire l'information clé publique comme ceci:
DecodedCertificate = public_key:pem_entry_decode(Certificate).
DecodedCertificate#'Certificate'.tbsCertificate#'TBSCertificate'.subjectPublicKeyInfo.
qui retourne:
#'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,...>>}
Ou décomprimez un niveau plus loin pour obtenir la clé elle-même:
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,...>>
Merci, ça m'a beaucoup aidé. Il ne manque que la dernière étape où vous décodez la clé publique et obtenez le type rsa_public_key() que vous devez utiliser dans public_key: decrypt_public/2. – Jeyhey
Il est possible que subjectPublicKey pourrait être '{0, Keyder} = DecodedCertificate # 'Certificate'.tbsCertificate #' TBSCertificate'.subjectPublicKeyInfo # 'SubjectPublicKeyInfo'.subjectPublicKey.' Où Keyder est Der encodée, si la clé est de type RSA 'RsaPublicKey = clé publique: der_decode ('RSAPublicKey', KeyDer) .' Maintenant RsaPublicKey est de type rsa_public_key() –