簡體   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