Bash 查找并替换(增量)ASN.1 BER十六进制值
我有一个很长的十六进制字符串(从BER ASN.1转换而来),在这里我需要找到并增加一个不正确的特定值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
<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