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

Convert::ASN1解码异常求助:Perl模块解码ASN.1数据失败

求助:Perl的Convert::ASN1解码数据卡壳,求指点!

我肯定漏掉了某个特别基础的关键点!我能用在线ASN.1工具解码这段示例数据,但用Perl的Convert::ASN1基础功能时却一直卡壳,有没有大佬知道我哪里错了?相关代码如下:

use strict; use warnings; use Convert::ASN1; use feature 'say';
# example from:
# http://www.oss.com/asn1/resources/asn1-made-simple/introduction.html
my $hex_data = '3018800A4A6F686E20536D697468810A39383736353433323130';
my $bin_data = join '', pack 'H*', $hex_dat...

可能的问题点&解决办法:

我看了下你的代码和数据,大概率是两个问题导致的:

  1. 没定义对应的ASN.1语法
    Convert::ASN1不是“自动识别”数据结构的,你得先告诉它要解析的ASN.1结构是什么样的。你的数据是一个带上下文特定标签的序列,对应的ASN.1规范得先定义好。

  2. 代码里的笔误
    $hex_dat少了最后一个字母a,应该是$hex_data,这个笔误会直接导致编译错误。另外join '', pack 'H*', ...是多余的,pack 'H*'直接就能返回二进制字符串。

修正后的完整代码:

use strict;
use warnings;
use Convert::ASN1;
use feature 'say';

# 先定义匹配数据的ASN.1结构
my $asn = Convert::ASN1->new;
$asn->prepare(q{
    Person ::= SEQUENCE {
        name [0] OCTET STRING,  -- 对应标签80(上下文特定0)
        id [1] OCTET STRING     -- 对应标签81(上下文特定1)
    }
}) or die $asn->error;

my $hex_data = '3018800A4A6F686E20536D697468810A39383736353433323130';
my $bin_data = pack 'H*', $hex_data;

# 解码数据
my $decoded = $asn->decode($bin_data) or die $asn->error;

# 输出结果
say "Name: " . $decoded->{name};
say "ID: " . $decoded->{id};

运行这段代码就能正确解析出Name: John Smith和ID: 9876543210啦!

内容的提问来源于stack exchange,提问作者Kevin G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:34