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...
可能的问题点&解决办法:
我看了下你的代码和数据,大概率是两个问题导致的:
没定义对应的ASN.1语法
Convert::ASN1不是“自动识别”数据结构的,你得先告诉它要解析的ASN.1结构是什么样的。你的数据是一个带上下文特定标签的序列,对应的ASN.1规范得先定义好。代码里的笔误
$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.
相关产品推荐
相关产品推荐

