Perl Convert::ASN1解码错误
我一定错过了一些很明显的东西。我可以使用在线工具(如)解码此示例数据位,但在基本使用Perl的Convert::ASN1时遇到了问题。知道我错过了什么吗 严格使用; 使用警告; 使用Convert::ASN1; 使用特征“说”; 示例来自: http://www.oss.com/asn1/resources/asn1-made-simple/introduction.html 我的$hex_数据='3018800A4A6F686E20536D69746810A3938336353433323130'; my$bin_data=join,pack'H*,$hex_data; 转换::ASN1::asn_转储$bin_数据; 印刷品: 0000 24:顺序{ 0002 10:[上下文0] 0004:4A 6F 68 6E 20 53 6D 69 74 68约翰·史密斯 000E 10:[上下文1] 0010 : 39 38 37 36 35 34 33 32 31 30 __ __ __ __ __ __ 9876543210 001A:} my$asn=转换::ASN1->新建; $asn->准备查找“联系人” 或死$asn->错误; my$payload=$asn1\u节点->解码$bin\u数据 或骰子无法解码联系人:.$asn1\U节点->错误; 印刷品: 无法解码联系人:解码错误801a 2 4姓名 支持YaFred下面的答案,这就是80和81在编码字符串中的位置:Perl Convert::ASN1解码错误,perl,asn.1,Perl,Asn.1,我一定错过了一些很明显的东西。我可以使用在线工具(如)解码此示例数据位,但在基本使用Perl的Convert::ASN1时遇到了问题。知道我错过了什么吗 严格使用; 使用警告; 使用Convert::ASN1; 使用特征“说”; 示例来自: http://www.oss.com/asn1/resources/asn1-made-simple/introduction.html 我的$hex_数据='3018800A4A6F686E20536D69746810A393833635343332313
SEQ length=24 ** l=10 J o h n S m i t h ** l=10 9 8 7 6 5 4 3 2 1 0
30 18 80 0A 4A 6F 686E20536D697468 81 0A 39383736353433323130
我不确定您的十六进制字符串是从哪里来的……但是如果您使用Convert::ASN1::encode方法,您会得到一个稍微不同的十六进制字符串,可以正确解码:
my $res = $asn->encode({ name => 'John Smith', phone => 9876543210 });
my $res_hex = unpack 'H*', $res;
print "res_hex after encode : $res_hex\n";
print "original hex_data : " . lc($hex_data) . "\n";
print "\n";
my payload = $asn1_node->decode($res) or die $asn1_node->error;
use Data::Dumper;
print Dumper($payload);
输出
也许这和
$asn->prepare(<<ASN1) or die $asn->error;
My-Module DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Contact ::= SEQUENCE {
name VisibleString,
phone NumericString
}
END
ASN1
如果你从ASN.1开始解释有点长
您没有为标记上下文提供类型联系人应该是模块的一部分。所以,工具正在做出选择
您显示的hexa是使用自动标记编码的结果
这两个字符串的标记分别为“80”上下文标记0=1000 0000和“81”上下文标记1=1000 0001
@xxfelixxx得到了一些不同的东西,因为编码是作为显式标记执行的
这两个字符串的标记是VisibleString的'1a'通用标记和NumericString的'12'通用标记Perl模块实际上不支持这些额外的行,但这就是发生的事情,是的。我将用一些额外的信息来更新这个问题,显示80和81在字符串中的位置。这很遗憾。您可以用另一种方式解决问题,并用模块定义围绕类型::=开始和结束,以使oss.com生成perl模块应该理解的编码。
$asn->prepare(<<ASN1) or die $asn->error;
My-Module DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Contact ::= SEQUENCE {
name VisibleString,
phone NumericString
}
END
ASN1