Почему меняется размер закодированного сообщения
Перейти к содержимому

Почему меняется размер закодированного сообщения

  • автор:

Кодирование для чайников, ч.1

Не являясь специалистом в обозначенной области я, тем не менее, прочитал много специализированной литературы для знакомства с предметом и прорываясь через тернии к звёздам набил, на начальных этапах, немало шишек. При всём изобилии информации мне не удалось найти простые статьи о кодировании как таковом, вне рамок специальной литературы (так сказать без формул и с картинками).

Статья, в первой части, является ликбезом по кодированию как таковому с примерами манипуляций с битовыми кодами, а во второй я бы хотел затронуть простейшие способы кодирования изображений.

0. Начало

Поскольку я обращаюсь к новичкам в этом вопросе, то не посчитаю зазорным обратиться к Википедии. А там, для обозначения кодирования информации, у нас есть такое определение — процесс преобразования сигнала из формы, удобной для непосредственного использования информации, в форму, удобную для передачи, хранения или автоматической переработки.

Чего мне не хватало в 70-80-е, так это в школе, пусть не на информатике, а, например, на уроках математики — базовой информации по кодированию. Дело в том, что кодированием информации каждый из нас занимается ежесекундно, постоянно и в целом — не концентрируясь на самом кодировании. То есть в быту мы это делаем постоянно. Так как это происходит?

Мимика, жесты, речь, сигналы разного уровня — табличка с надписью, знак на дороге, светофоры, и для современного мира — штрих- и бар-коды, URL, хэш-тэги.

Давайте рассмотрим некоторые более подробно.

1.1 Речь, мимика, жесты

Удивительно, но всё это — коды. С помощью них мы передаём информацию о своих действиях, ощущениях, эмоциях. Самое важное, чтобы коды были понятны всем. Например, родившись в густых лесах у Амазонки и не видя современного городского человека, можно столкнуться с проблемой непонимания кода — улыбка, как демонстрация зубов, будет воспринята как угроза, а не как выражение радости.

Следуя определению, что же происходит когда мы говорим? Мысль — как форма, удобная для непосредственного использования, преобразуется в речь — форму удобную для передачи. И, смотрите, так как у звука есть ограничение как на скорость, так и на дальность передачи, то, например, жест, в какой-то ситуации, может быть выбран для передачи той же информации, но на большее расстояние.

Но мы всё еще будем ограничены дальностью остроты нашего зрения, и тогда — человек начинает придумывать другие способы передачи и преобразования информации, например огонь или дым.

1.2 Чередующиеся сигналы

Индеец пингует

В примитивном виде кодирование чередующимися сигналами используется человечеством очень давно. В предыдущем разделе мы сказали про дым и огонь. Если между наблюдателем и источником огня ставить и убирать препятствие, то наблюдателю будет казаться, что он видит чередующиеся сигналы «включено/выключено». Меняя частоту таких включений мы можем выработать последовательность кодов, которая будет однозначно трактоваться принимающей стороной.

Наряду с сигнальными флажками на морских и речных судах, при появлении радио начали использовать код Морзе. И при всей кажущейся бинарности (представление кода двумя значениями), так как используются сигналы точка и тире, на самом деле это тернаный код, так как для разделения отдельных кодов-символов требуется пауза в передаче кода. То есть код Морзе кроме «точка-тире», что нам даёт букву «A» может звучать и так — «точка-пауза-тире» и тогда это уже две буквы «ET».

1.3 Контекст

Когда мы пользуемся компьютером, мы понимаем, что информация бывает разной — звук, видео, текст. Но в чем основные различия? И до того, как начать информацию кодировать, чтобы, например, передавать её по каналам связи, нужно понять, что из себя представляет информация в каждом конкретном случае, то есть обратить внимание на содержание. Звук — череда дискретных значений о звуковом сигнале, видео — череда кадров изображений, текст — череда символов текста. Если мы не будем учитывать контекст, а, например, будем использовать азбуку Морзе для передачи всех трёх видов информации, то если для текста такой способ может оказаться приемлемым, то для звука и видео время, затраченное на передачу например 1 секунды информации, может оказаться слишком долгим — час или даже пара недель.

2. Кодирование текста

От общего описания кодирования перейдём к практической части. Из условностей мы за константу примем то, что будем кодировать данные для персонального компьютера, где за единицу информации приняты — бит и байт. Бит, как атом информации, а байт — как условный блок размером в 8 бит.

Текст в компьютере является частью 256 символов, для каждого отводится один байт и в качестве кода могут быть использованы значения от 0 до 255. Так как данные в ПК представлены в двоичной системе счисления, то один байт (в значении ноль) равен записи 00000000, а 255 как 11111111. Чтение такого представления числа происходит справа налево, то есть один будет записано как 00000001.

Итак, символов английского алфавита 26 для верхнего и 26 для нижнего регистра, 10 цифр. Так же есть знаки препинания и другие символы, но для экспериментов мы будем использовать только прописные буквы (верхний регистр) и пробел.

Тестовая фраза «ЕХАЛ ГРЕКА ЧЕРЕЗ РЕКУ ВИДИТ ГРЕКА В РЕЧКЕ РАК СУНУЛ ГРЕКА РУКУ В РЕКУ РАК ЗА РУКУ ГРЕКУ ЦАП».

2.1 Блочное кодирование

Информация в ПК уже представлена в виде блоков по 8 бит, но мы, зная контекст, попробуем представить её в виде блоков меньшего размера. Для этого нам нужно собрать информацию о представленных символах и, на будущее, сразу подсчитаем частоту использования каждого символа:

Количество

Почему меняется размер закодированного сообщения

Base64 — стандарт кодирования байтов при помощи только 64 символов (A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации).

Одним байтом можно закодировать 256 значений (2 8 бит), в то время как Base64 только 64 (2 6 бит).

Из этого следует соотношение 2 8 + 2 8 + 2 8 = 2 6 + 2 6 + 2 6 + 2 6 , т.е. каждые 3 исходных байта кодируются в 4 байта.

Можно вывести формулу:

[Кол-во байт в Base64] = ([Исходное кол-во байт] / 3) * 4 или [Кол-во байт в Base64] = 4 * [Исходное кол-во байт] / 3 или [Кол-во байт в Base64] = 4/3 * [Исходное кол-во байт]

Например: Файл размером 1500 байт в Base64 будет занимать 2000 байт (т.е. на 1/3 больше).

Рассмотрим обратную задачу: есть Base64-строка и нужно понять сколько это будет байтов при раскодировке. Из формул выше можно выразить исходное кол-во байт:

[Исходное кол-во байт] = 3/4 * [Кол-во байт в Base64] или [Исходное кол-во байт] = 0.75 * [Кол-во байт в Base64]

Например: Base64-строка размером 2000 байт, декодируется в 1500 байт (т.е. на 1/4 меньше);

Почему меняется размер закодированного сообщения

Base64 — стандарт кодирования байтов при помощи только 64 символов (A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации).

Одним байтом можно закодировать 256 значений (2 8 бит), в то время как Base64 только 64 (2 6 бит).

Из этого следует соотношение 2 8 + 2 8 + 2 8 = 2 6 + 2 6 + 2 6 + 2 6 , т.е. каждые 3 исходных байта кодируются в 4 байта.

Можно вывести формулу:

[Кол-во байт в Base64] = ([Исходное кол-во байт] / 3) * 4 или [Кол-во байт в Base64] = 4 * [Исходное кол-во байт] / 3 или [Кол-во байт в Base64] = 4/3 * [Исходное кол-во байт]

Например: Файл размером 1500 байт в Base64 будет занимать 2000 байт (т.е. на 1/3 больше).

Рассмотрим обратную задачу: есть Base64-строка и нужно понять сколько это будет байтов при раскодировке. Из формул выше можно выразить исходное кол-во байт:

[Исходное кол-во байт] = 3/4 * [Кол-во байт в Base64] или [Исходное кол-во байт] = 0.75 * [Кол-во байт в Base64]

Например: Base64-строка размером 2000 байт, декодируется в 1500 байт (т.е. на 1/4 меньше);

Почему меняется размер закодированного сообщения

Почему русские символы занимают два байта в utf-8, если они входят в диапазон от 128 до 255?

А при индексации русской строки символы занимают 16 бит, хотя в расширенной таблице ascii они вполне помещаются в 8 бит.

Потому, что они не входят в диапазон от 128 до 256 в UFT8.

Они входят в этот диапазон в однобайтовых кодировках типа CP1251 или CP866.

Для символов Юникода с номерами от U+0000 до U+007F (занимающими один байт c нулём в старшем бите) кодировка UTF-8 полностью соответствует 7-битной кодировке US-ASCII.

Почему строка в кодировке base64 имеет знак = в конце

Я знаю base64 кодирование и как вычислить base64 кодировка в C#, однако я видел несколько раз, что когда я преобразую строку в base64, есть = в конце.

возникло несколько вопросов:

  1. тут base64 строка всегда заканчивается = ?
  2. почему = добавить в конце?

8 ответов

более полный ответ заключается в том, что строка в кодировке base64 не всегда заканчивается = , это закончится только одним или двумя = если они необходимы для заполнения строки до надлежащей длины.

2 — в качестве короткого ответа : 65-й символ (знак» postinfo clearfix»>

последняя последовательность «= = «указывает, что последняя группа содержала только один байт, а» postinfo clearfix»>

  1. нет.
  2. для заполнения строки, закодированной в Base64, несколькими символами длиной 4, чтобы ее можно было правильно декодировать.

его определена в RFC 2045 как специальный символ заполнения, если в конце закодированных данных доступно менее 24 бит.

знак равенства ( = ) используется в качестве дополнения в некоторых формах кодировки base64. The статья в Википедии на base64 есть все детали.

Практикум по курсу информационная безопасность. ИБ512 Модуль 3 Практикум Раздел 3.1 v.11. Автономная некоммерческая организация дополнительного профессионального образования Академия АйТи

С помощью технологии виртуальных машин для выполнения лабораторных работ разработана виртуальная машина CCServer. На ней будут проводиться все лабораторные работы.

Для работы используется учётная запись

Pa$$w0rd
В виртуальной машине все необходимые для работы файлы находятся на компакт-диске D:\ и флоппи-дискете A:\.

Тема 3.1.2. Криптографические методы защиты информации. (4 ак.ч.)

Упражнения выполняется на удалённой виртуальной машине

Упражнение № 3.1.2.1.
Изучение базовых криптографических операций

Описание упражнения

Данное упражнение предназначено для практического изучения способов кодирования и операции XOR.

Время выполнения упражнения 90 минут

Задача 3.1.2.1.1. Установка необходимых программ

  1. Присоединитесь к лабораторной машине (см. Введение) и войдите в систему от имени локальной учётной записи Administrator.
  2. Откройте программу Проводник.
  3. Скопируйте папку D:\Temp в диск C:\.
  4. Запустите программу установки приложения CryptoDemo: D:\Install\CryptoDemo\Setup.exe. Согласитесь со всеми параметрами программы установки по умолчанию.

Задача 3.1.2.1.2. Кодирование Base64

  1. Запустите программу cryptography_study, которая располагается по пути C:\Temp\cryptography_study\cryptography_study.exe. Выберете тип кодирования «Преобразование в Base64» как на рисунке.
  1. Данные для кодирования можно ввести в поле ввода «Источник» или загрузить из файла, нажав на кнопку . Введите или загрузите из файла такое сообщение, чтобы сначала были латинские символы, а затем – кириллица, например «Hello world. Привет мир. ». Результат кодирования формируется в нижней части окна «Результат».
  2. Переключите кодировку источника «Текст ASCII»/«Текст UTF-8». Убедитесь, что меняется размер и состав результата.

Необходимы для заполнения строки до надлежащей длины
Почему на каждый третий символ источника, символы «=» изчезают?

Задача 3.1.2.1.3. Похищение закрытого ключа шифрования с помощью кодирования Base64

  1. Создайте текстовый файл на рабочем столе, добавьте в него любой текст и включите шифрование EFS для него. Для этого щёлкните правой кнопкой манипулятора типа «мышь» по файлу. Выберете пункт меню «Свойства». В открывшемся окне свойст во вкладке «Общие» выберете атрибуты «Другие…». В появившемся окне «Дополнительные атрибуты» установите «Шифровать содержимое для защиты данных» и в появившемся окне «Предупреждение при шифровании» выберете «Зашифровать только файл». Далее, нажимая на кнопки «ОК» нужно закрыть все онка.
  1. Для шифрования автоматически будет создан закрытый ключ шифрования и сертификат для учётной записи Администратор. Его нужно сохранить в файл. Для этого нажмите кнопку «Пуск» и выберете пункт меню «Выполнить». В открывшемся окне введите certmgr.msc и нажмите кнопку «ОК». Откроется оснастка управления сертификатами. Раскройте дерево в левой части окна «Сертификаты – текущий пользователь»\«Личное»\«Сертификаты».
  1. Справа в менеджере сертификатов должен отобразиться сертификат «Администратор». Для его сохранения в файл с закрытым ключём нужно нажать по сертификату правой кнопкой манипулятора типа «мышь». В появившемся окне выбрать пункт «Все задачи»\«Экспорт…». В открывшемся окне мастера экспорта сертификатов нажать «Далее >», и в следующем окне обязательно выбрать «Да, экспортировать закрытый ключ» и нажать кнопку «Далее >». В следующем окне ничего не выбирать и нажать кнопку «Далее». Откроется окно ввода нового пароля для сохраняемого ключа. Введите любой пароль, например «1» и нажмите «Далее >». В открывшемся окне с помощью кнопки «Обзор…» выберете имя нового файла и его раположение, например «C:\Temp\» и имя «my» и нажмите кнопку «Далее >». В последнем окне мастера нажмите кнопку «Готово». В указанном расположении появится файл с закрытым ключём. Для примера это будет файл «my.pfx» в директории C:\Temp\.
  1. Запустите программу cryptography_study, которая располагается по пути C:\Temp\cryptography_study\cryptography_study.exe. Она стартует в режиме кадирования «Преобразование в Base64». Выберете загрузку данных из файла «Загрузить как «сырые данные»… » и укажите сохранённый на предыдущем шаге файл.
  1. Кодирование будет выполнено автоматически. Полученные данные нужно сохранить в файл, нажав на кнопку . Выберете имя файла C:\Temp\my.txt.
  1. Закройте программу cryptography_study. Проанализируйте полученный тектовый файл. Это и есть закрытый ключ, который можно распечатать на принтере и вынести за пределы предприятия без использования дисков, дискет и прочих технических средств.

Задача 3.1.2.1.4. Кодирование Hex (шестнадцатиричное)

  1. Запустите программу cryptography_study, которая располагается по пути C:\Temp\cryptography_study\cryptography_study.exe. Выберете тип кодирования «Преобразование в Hex» как на рисунке.

Задача 3.1.2.1.5. Изучение операции XOR

XOR — Сложение по модулю 2 («сумма по модулю 2», «не равно», исключающее «ИЛИ» (ИЛИ с исключением из правила четвёртой комбинации «1,1»), XOR,) — логическая операция (функция), по своему применению максимально приближённая к грамматической конструкции «либо … либо …» или «если операнды не равны, то истинно (1)».
  1. Отредактируйте файл с симметричным ключём C:\Temp\cryptography_study\key.txt при необходимости.
  2. Запустите программу cryptography_study, которая располагается по пути C:\Temp\cryptography_study\cryptography_study.exe. Выберете тип кодирования «xOr шифрование»\«Ключ из файла» как на рисунке. При необходимости отредактируйте текст источника.
  1. Используя кнопку загрузите ключ из файла C:\Temp\cryptography_study\key.txt. Шифрование будет выполнено автоматически. Результат не предназначен для текстового редактирования. Сохраните результат в файл C:\Temp\crypt.dat с помощью кнопки .
  2. Выполните обратное шифрование. Для этого загрузите файл C:\Temp\crypt.dat как источник «Загрузить как ASCII…», нажав на кнопку (в разделе источник) и загрузите ключ из файла C:\Temp\cryptography_study\key.txt, используя кнопку . Убедитесь, что расшифрование произошло корректно.
  1. Измените ключ в файле C:\Temp\cryptography_study\key.txt с «Это ключ шифрования» на «Эт кл ши ов ия» (часть символов заменяется пробелами, длина фразы не меняется!). Выполните расшифрование таким ключём. Проанализируйте результат.

Задача 3.1.2.1.5. Изучение шифра гаммирования на операции XOR

Гаммирование.

  1. Запустите программу cryptography_study, которая располагается по пути C:\Temp\cryptography_study\cryptography_study.exe. Выберете тип кодирования «xOr шифрование»\«Гаммирование» как на рисунке. При необходимости отредактируйте текст источника.
  1. Укажите начальное значение генератора гаммы, например 3. Это начальное значение фактически явяется ключём. Полученный результат сохраните в файл C:\Temp\crypt.dat.
  2. Выполните обратное шифрование. Для этого загрузите файл C:\Temp\crypt.dat как источник «Загрузить как ASCII…», нажав на кнопку (в разделе источник) и укажите то же самое начальное значение генератора гаммы. Убедитесь, что расшиврование производится корректно.
  1. Выберете другое начальное значение генератора гаммы и убедитесь, что расшифрование происходит некорректно.
  2. Закройте все открытые окна.
Сообщите преподавателю о завершении выполнения упражнения

Упражнение № 3.1.2.2.
Изучение основных криптографических алгоритмов

Описание упражнения

Данное упражнение предназначено для практического изучения алгоритмов симметричного и асимметричного шифрования и хэширования.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *