繁体   English   中英

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

[英]Find and replace (increment) ASN.1 BER hex value

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

<TAG> <LENGTH> <VALUE to INCREMENT>

value > 127dec时,ASN.1标记为84,长度字节将从01更改为02。 因此,增量值将变为2个字节。

该值应从00开始。

例如

- Original file: ...840101...840107...84020085...84020097
- New file:      ...840100...840101...84020080...84020081

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

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

假设您已经在文本工作中使用八位字节流,您可以考虑用awksed搜索/替换文本片段。 如果你只能使用bash ,可能是变量替换( ${parameter/pattern/string}${parameter:offset:length} )会起作用吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM