[英]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的所有長度。 這不是一個簡單的搜索/替換操作。
假設您已經在文本工作中使用八位字節流,您可以考慮用awk
或sed
搜索/替換文本片段。 如果你只能使用bash
,可能是變量替換( ${parameter/pattern/string}
或${parameter:offset:length}
)會起作用嗎?
但請記住,BER是非常靈活的,因為(有時)相同的數據結構可能被編碼不同,並且仍然構成有效的編碼。 其背后的基本原理是允許編碼器針對其自身情況進行優化(例如,節省內存或CPU周期或復制等)。
我想說的是,根據您的情況,您的搜索/替換邏輯可能會失敗。 防彈解決方案是完全解碼您的BER八位字節流,更改您需要的數據結構並將其重新編碼回BER。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.