public_key:pem_entry_decode(Certificate) 返回一个Certificate 记录。要从中提取公钥,您需要加载记录定义。在 Erlang shell 中,键入以下内容:
rr(public_key).
在将记录定义加载到 shell 后,返回值将包含字段名称以及字段值,这应该会让事情更清楚一些。
在 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,...>>