Я уже некоторое время искал эту тему, не найдя подходящих ответов. Поэтому подумал о том, чтобы взять его на «Stackoverflow» ...ASN.1 кодировки BER, PER и т. Д. В C#
Мы пытаемся закодировать строку, чтобы передать ее по TCP/IP-соединению. Поскольку ASN.1 является самым популярным, чтобы сделать это, мы пытаемся использовать различные правила BER, DER, PER и т. Д., Чтобы узнать, какой из них мы можем использовать. Наше приложение представляет собой приложение на основе .net, и я искал свободно доступную библиотеку, которая делает это.
Странно, что я не мог найти никаких бесплатных библиотек. Итак, я начал искать в самой структуре .Net. Я обнаружил, что есть только «BERConverter». Итак, я сделал небольшой пример. Пример: строка
string str = "The BER format specifies a self-describing and self-delimiting format for encoding ASN.1 data structures. Each data element is encoded as a type identifier, a length description, the actual data elements, and, where necessary, an end-of-content marker. These types of encodings are commonly called type-length-value or TLV encodings. This format allows a receiver to decode the ASN.1 information from an incomplete stream, without requiring any pre-knowledge of the size, content, or semantic meaning of the data"
В UTF-8 или ASCII оно отображается как 512 байт. Я использую следующий код для кодирования, используя BER
public static byte[] BerConvert(byte[] inputbytes)
{
byte[] output = BerConverter.Encode("{o}", inputbytes);
return output;
}
Я получаю массив с размером 522. В некоторых других случаях, я считаю, что увеличение размера байт по сравнению с исходным текстом. Я думал, что кодирование уменьшит размер. Почему так происходит?
Помимо BER, существуют ли другие правила кодирования, такие как PER или DER, которые могут использоваться для уменьшения размера кодировки? Есть ли примеры, библиотеки или поддержка, которые помогут реализовать эти стили кодирования?
Зачем уменьшать размер ASN.1? Это не то, для чего. Для этого используйте сжатие. –
@NathanTuggy, ну, правила кодирования пакетов ASN.1 связаны с минимизацией количества бит, используемых для представления данных. Например, целому числу со значением '10' не требуется 32 бита, требуется только 4. PER использует это, используя только столько бит, сколько требуется текущему значению этого целого числа (плюс некоторые дополнительные функции для маркировки границ и т. Д.). Напротив, программа должна использовать 'int' для одного и того же целого в исходном коде или, может быть,' int8', если бы было известно, что он никогда не будет> 127. Нет 'int4'. Таким образом, PER-кодирование может быть меньше размера значения в памяти. – bazza