Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 查找并替换(增量)ASN.1 BER十六进制值_Bash_Hex_Asn.1_Ber - Fatal编程技术网

Bash 查找并替换(增量)ASN.1 BER十六进制值

Bash 查找并替换(增量)ASN.1 BER十六进制值,bash,hex,asn.1,ber,Bash,Hex,Asn.1,Ber,我有一个很长的十六进制字符串(从BER ASN.1转换而来),在这里我需要找到并增加一个不正确的特定值 <TAG> <LENGTH> <VALUE to INCREMENT> 任何想法如何最好地做到这一点,最好使用标准的BASH命令?< P>假设你已经在文本工作中有八位字节的流,你可以考虑用 AWK 或 SED搜索/替换文本。如果只能使用bash,那么变量替换(${parameter/pattern/string}或${parameter:offset:le

我有一个很长的十六进制字符串(从BER ASN.1转换而来),在这里我需要找到并增加一个不正确的特定值

<TAG> <LENGTH> <VALUE to INCREMENT>

任何想法如何最好地做到这一点,最好使用标准的BASH命令?

< P>假设你已经在文本工作中有八位字节的流,你可以考虑用<代码> AWK 或<代码> SED搜索/替换文本。如果只能使用
bash
,那么变量替换(
${parameter/pattern/string}
${parameter:offset:length}
)是否可行

但是,请记住,BER是非常灵活的,因为(有时)相同的数据结构可能以不同的方式编码,这仍然构成有效的编码。其基本原理是允许编码器针对自身情况进行优化(例如节省内存或CPU周期或复制等)


我想说的是,根据您的情况,您的搜索/替换逻辑可能会失败。防弹解决方案是完全解码您的BER八位字节流,更改所需的数据结构并将其重新编码回BER。

Ilya Etingof已经暗示了这一点,但为了明确起见,BER使用标记、长度、值(TLV)编码,其中值本身可以是TLV。如果更改嵌套在TLV中的TLV的长度,则还需要更新封闭TLV的所有长度。这不是一个简单的搜索/替换操作。

感谢您的支持,并指出搜索/替换逻辑可能会失败,但在我看来,这似乎是最简单的操作,因为我不熟悉BER编码/解码。我一直在尝试awk/sed,但未能找到正确的方法使其工作。欢迎使用堆栈溢出;
- Original file: ...840101...840107...84020085...84020097
- New file:      ...840100...840101...84020080...84020081