Математика и криптография. Тайны шифров и логическое мышление - Роман Душкин
Шрифт:
Интервал:
Закладка:
И больше ничего. Никаких шифровок, ничего такого, о чём мы говорили раньше. Это странно.
А теперь посмотри на этот текст внимательнее. Почему в нём использованы обычные и жирные буквы? Обычно так никто не пишет. Нет ли тут какой-то тайны, над которой надо бы поломать голову?
Действительно, ты уже можешь догадаться, что в этой книге ничего не написано просто так. Тут явно что-то закодировано. Но для того чтобы это понять, необходимо немного отвлечься и изучить новую для тебя тему из математики. Тут уж ничего не поделаешь, поскольку криптография — это наука, в которой очень много математики. И даже если тебе математика не очень нравится, то я надеюсь, что ты её полюбишь, прочитав до конца эту книгу и вместе со мной попробовав все способы шифрования и расшифровки. Ведь математика позволяет решать такие интересные загадки! Честно говоря, математика позволяет делать практически всё, что только можно придумать.
Почему мы вообще используем счёт до десяти? Почему у нас десять цифр: 0 1 2 3 4 5 6 7 8 9? Почему, если прибавить к девяти единицу, то произойдёт так называемый перенос разряда и число станет двузначным? Для записи числа «десять» мы не вводим одиннадцатую цифру, а используем те же самые цифры, что и для первых десяти чисел от нуля до девяти. А что вообще обозначает запись «10»? Эта запись обозначает: один десяток и ноль единиц. А, к примеру, запись «156» обозначает: одна сотня, пять десятков и шесть единиц. А вот запись «7325» обозначает: семь тысяч, три сотни, два десятка и пять единиц.
А что, если бы у нас было не две руки и десять пальцев, а этакие щупальца, как у осьминога? Мы могли бы считать только до двух, и перенос разряда происходил бы, когда мы досчитывали бы не до десяти, а до двух. Это очень сложно воспринять при первом чтении, но ты постарайся: для записи любого числа можно обойтись всего лишь двумя цифрами: 0 и 1. Такова двоичная система счисления , и её постоянно используют программисты, а еще очень любят использовать математики, особенно криптографы.
Смотри: у нас есть всего две цифры, но мы хотели бы считать любое количество предметов, которое нам может встретиться. Когда предметов нет, мы используем цифру 0. Если предмет один, то мы используем цифру 1. А когда предмета два? Тут происходит перенос разряда, который в двоичной системе используется всегда, когда надо сложить 1 и 1. Так вот если надо посчитать два предмета, то мы запишем это так: 10. А три предмета? Это проще: 10 + 1 = 11. Если у нас четыре предмета, то надо к трём прибавить один, то есть 11 + 1. Что получится? Сложение делается точно так же, как и в десятичной системе. Сначала складываем единицы, получается 10, то есть происходит перенос разряда. Но в следующем разряде уже стоит 1, поэтому опять надо сложить единицы, и опять произойдет перенос разряда. Получается, что четыре предмета обозначаются как 100.
Вот так начинается счёт в этой замечательной системе счисления:
Ты сможешь определить, как в двоичной системе обозначается шестнадцать предметов?
Как перевести такие двоичные числа в привычный вид? Тут надо сделать то же самое, что и в десятичной системе, только роль разрядов — единиц, десятков, сотен, тысяч и т. д. играют единицы, двойки, четвёрки, восьмёрки. Всё это — так называемые степени основания системы счисления (основание двоичной системы счисления — двойка). Если в системе счисления десять цифр, то перенос разряда происходит на десятках, а когда у нас только две цифры, то приходится делать перенос разряда на двойках.
Таким образом, надо сложить друг с другом те степени двойки, для которых в двоичной записи числа стоит единица. Например, нам нужно перевести в десятичную систему двоичное число «101100110».
Эта таблица показывает, как это сделать. Для этого надо сложить числа 256, 64, 32, 4 и 2, и у нас получится 358. Впрочем, когда ты научишься пользоваться двоичной системой счисления так же обыденно, как и десятичной, тебе не надо будет ничего никуда переводить — ты сможешь считать и выполнять все необходимые математические операции прямо в этой системе (кстати, она намного проще, чем десятичная).
Итак, теперь ты понимаешь, что для тех, кто умеет пользоваться двоичной системой счисления, «круглые» числа — это не 10, 100, 1000 и далее, а числа, которые в десятичной системе записываются так: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т. д. Запомни эти числа, они, можно сказать, «волшебные». Например, их очень часто используют программисты. Есть даже такой анекдот: программисты думают, что в километре 1024 метра, а в килограмме 1024 грамма, поскольку в килобайте — 1024 байта. И в этом есть доля правды: число 1024 в двоичной системе счисления записывается как единица с десятью нулями: 10000000000. (Это абсолютно «круглое» число: даже число его нулей — 10 — является круглым как в десятичной, так и в двоичной записи).
Есть и ещё одна шутка: в мире существует 10 типов людей — те, кто знает двоичную систему, и те, кто не знает её . Надеюсь, что теперь ты можешь посмеяться над ней вместе со мной, поскольку и ты теперь знаешь двоичную систему.
Вот тут необходимо остановиться и запомнить новый термин. Ты уже давно знаешь, что такое «цифра». Так вот двоичные цифры, то есть 0 и 1, называются битами . Когда ты услышишь слово «бит », то сразу поймешь, что речь идёт о двоичных цифрах.
Теперь вспомни, что мы договорились использовать в нашем специальном алфавите (который ввели на прошлой неделе) ровно 32 символа. Теперь ты понимаешь, почему на прошлой неделе я выделил слово «ровно»? Число 32 действительно «ровное» или «круглое», поскольку в двоичной системе счисления для его записи используется число 100000. Что это значит для нас? То, что для двоичного представления любого символа из нашего алфавита требуется пять двоичных цифр. Единственное, о чём нужно договориться: мы всегда будем использовать именно пять цифр, даже если в начале числа надо ставить нули: 00100, 01011 и т. д.
Таким образом можно закодировать все символы нашего алфавита от пробела до буквы «Я». Все они получают номер от 0 до 31 в десятичной системе счисления и код от 00000 до 11111 в двоичной. Вот интересная таблица, которую я рекомендую тебе выучить наизусть:
Это достаточно простое кодирование. По сути, это шифр одноалфавитной замены, то есть код, не скрывающий тайную информацию. Но что нам это даёт?