You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Perl中解码DER编码的X.509证书主题?附示例数据

在Perl中解码DER编码的X.509证书主题

给定的十六进制字符串 300f310d300b0603550403130446616B65 是DER编码的X.509证书主题,解码后可得到字符串"Fake"。以下是具体实现方法:

实现步骤

  1. 安装依赖模块
    需要用到Convert::ASN1模块处理ASN.1的DER解码,若未安装,可通过CPAN安装:

    cpanm Convert::ASN1
    
  2. 代码实现
    下面的代码完成十六进制转二进制、DER解码,并提取证书主题的通用名称(CN)值:

    use strict;
    use warnings;
    use Convert::ASN1;
    
    # 给定的DER十六进制数据
    my $hex_der = '300f310d300b0603550403130446616B65';
    # 将十六进制转为二进制
    my $bin_der = pack('H*', $hex_der);
    
    # 定义X.509 Name对应的ASN.1结构
    my $asn = Convert::ASN1->new;
    $asn->prepare(q{
        Name ::= SEQUENCE OF RelativeDistinguishedName
        RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
        AttributeTypeAndValue ::= SEQUENCE {
            type OBJECT IDENTIFIER,
            value ANY
        }
    }) or die $asn->error;
    
    # 解码二进制DER数据
    my $name = $asn->decode($bin_der) or die $asn->error;
    
    # 遍历提取通用名称(OID 2.5.4.3对应CN)
    foreach my $rdn (@$name) {
        foreach my $atv (@$rdn) {
            if ($atv->{type} eq '2.5.4.3') {
                print "证书主题:", $atv->{value}, "\n";
            }
        }
    }
    

代码说明

  • pack('H*', $hex_der):将十六进制字符串转换为DER解码所需的二进制数据。
  • ASN.1结构定义:严格匹配X.509证书主题的规范,Name是相对辨别名(RDN)的序列,每个RDN包含属性类型与值的集合。
  • 通用名称对应的OID为2.5.4.3,解码后该属性的value就是目标字符串"Fake"。

内容的提问来源于stack exchange,提问作者sasaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:35:02