ASN.1 (Abstract Syntax Notation One) представляет из себя язык для описания структур данных. По сути — это набор правил, для преобразования значений определённого типа в поток байтов для их последующей отправки по каналу связи. По мере развития языка, улучшались методы кодирования. Так помимо методов определения структур данных ASN.1 появились так же различные методы кодирования (BER, CER, DER, PER и др.). Одним из самых компактных методов кодирования ASN.1 (в плане результирующей байтовой последовательности), является «Packed Encoding Rules (PER)». Дело в том, что типы в BER (CER, DER), кодируются в виде последовательности TLV (Tag Length Value), в то время как в PER используются последовательности V (Value) или LV (Length Value). Такой подход позволяет уменьшить закодированную последовательность, однако, если BER можно декодировать без доступа к источнику ASN.1, получив "голые" результирующие данные (тип данных, плюс значение), то с PER такой фокус не пройдёт, без источника, какие-либо осмысленные результаты получить не получится (я не рассматриваю вариант глубокого анализа, с набором статистики по большому количеству реализаций).
В этой статье, я хотел бы рассказать о принципах кодирования структур данных при использовании правил кодирования PER.