• Онлайн: 2
Кодирование VS Шифрование: терминология
В быту мы часто говорим «закодировать сообщение», подразумевая «зашифровать». Люди, незнакомые с этой областью, часто путают «код» и «шифр», хотя разница между ними принципиальна.
Разных шифров придумано множество. Но и коды вообще могут быть разные: двоичный код, штрих-код, QR-код, генетический код, исходный код, двоичный код, машинный код, байт-код, код Морзе, пин-код, кей-код, CVC-код, код от домофона, код ОКВЭД, и даже биологический и поведенческий код. Как во всём этом разобраться?
Кодирование — это обработка информации, заключающаяся в преобразовании её в некоторую форму, удобную в дальнейшем для хранения, передачи и последующей обработки. Закодированное сообщение можно легко раскодировать, зная алгоритм, которым осуществлялось кодирование.
Шифрование — это тоже обработка информации, но его главная цель — скрыть смысл сообщения от посторонних. То есть шифрование – это тоже кодирование, но есть, как говорится, один нюанс. Отличительная черта шифрования — наличие секретного ключа (пароля, числа), без которого прочитать текст невозможно, даже если ты знаешь сам алгоритм шифрования.
🔑 Ключевое различие: Код vs Шифр
Код — это система, алгоритм, правила создания неких условных обозначений (кодовых слов), используемых в дальнейшем для кодирования. Самый первый код, который мы встретили в своей жизни, была всем известная азбука. При помощи неё можно устную речь «кодировать» в виде букв и записывать на бумаге.
Кодовая таблица — это совокупность используемых кодовых слов и их значений. В начале любой азбуки обычно есть табличка, в которой нарисованы буквы и картинки. А - арбуз, Б - белочка, В - вишня и т.п. Это и есть кодовая таблица. В данном случае картинки, из которых берутся звуки – это кодовые слова, а буквы – значения.
Если кодовая таблица всем известна, то мы имеем обычный код для кодирования (например, азбука Морзе или шрифт Брайля). А вот если кодовая таблица известна только отправителю и получателю, то перед нами уже самый натуральный шифр.
Код нужен для удобства или сжатия (он открыт), а шифр — для секретности (он закрыт ключом).
Основные понятия
Попробую разобрать основные понятия простым языком.
Для начала про само слово «код». В первую очередь код, как я говорил ранее, — это система условных обозначений или правило, по которому одним символам (или группам) ставятся в соответствие другие символы. Главная цель кодирования — приспособить информацию для передачи, хранения или обработки (например, сжать её или сделать удобной для компьютера). Пример: Азбука Морзе (точки и тире), ASCII (цифры для букв в компьютере) или QR-код. Здесь нет секрета: любой, кто знает правило (таблицу), может прочитать сообщение.
Иногда «кодом» называют не общее правило, по которому создаётся система кодирования, но и отдельные кусочки того, что получилось в результате кодирования. Поэтому можно встретить такие выражения: «код символа в коде Хаффмана». А ещё кодом может быть число из кодовой таблицы.
Когда я буду говорить «код» без уточнения, я буду иметь ввиду «общее правило», по которому строится схема кодирования (code / coding scheme).
Кодовое слово в кодировании — это последовательность символов, сгруппированных по определённым правилам кода, которой присвоено единственное значение. Кодовое слово (codeword) из кодовой таблицы или словаря (code table) я так и буду называть «кодовое слово». У каждого кодового слова есть своё значение (на которое и происходит замена кодируемого сообщения). А результат кодирования будет «кодированное сообщение». То есть чтобы закодировать неким кодом (алгоритмом) обычное сообщение, нужно взять (или составить самому) кодовую таблицу (словарь), содержащую кодовые слова со своими значениями, и произвести в соответствии с этой таблицей замену каждого кодового слова, встретившегося в исходном сообщении, на его значение.
Важное свойство: Хороший код должен быть однозначно декодируемым. Это значит, что при чтении потока кодовых слов не должно возникать путаницы, где заканчивается одно слово и начинается другое (для этого часто используют так называемые «префиксные коды»).
В шифровании: Словарь (или «кодовая книга») может использоваться в старых «кодовых шифрах», где целые слова заменялись на числа из книги. В современном шифровании словари почти не используются, так как они слишком громоздкие и уязвимые.
В сжатии данных: Словарь — это основа алгоритмов вроде ZIP. Программа составляет словарь часто повторяющихся фрагментов (например, «пробел» или «http://») и заменяет их короткими кодовыми словами, чтобы файл стал меньше.
💡 Резюме для запоминания
- Код: «Переводчик» для удобства. Открыт, не скрывает смысл.
- Шифр: «Замок» для секретности. Закрыт на ключ.
- Кодовое слово: То, во что превращается кусочек сообщения.
- Словарь: Список правил, как именно превращать (для кода) или таблица для подстановки (для старых шифров).
