_____________________________________________ ᴄʀʏᴘᴛᴏɢʀᴀᴘʜʏ with hash ---------------------------------------------------------------------------- Самый мощный шифровальщик в Scratch -----------------------------Предисловие---------------------------- В отличие от наивного метода шифрования, здесь используется "ключ". Ключ -- это уникальная последовательность символов, наподобие пароля. В проекте разрешены абсолютно все символы системы Unicode. Зашифровать сообщение можно любым ключом -- главное, чтобы кроме Вас, собеседник тоже знал его, и никто другой. Сообщение, зашифрованное одним ключом, невозможно расшифровать другим ключом. ------------------------------Инструкции------------------------------ Чтобы установить ключ, нажмите на жёлтый ключик. Чтобы зашифровать текст, нажмите на красный замочек. Чтобы расшифровать текст, нажмите на зелёный замочек. Чтобы выделить весь зашифрованный текст в списке-обменивателе, дважды кликните по нему. Чтобы выделить весь расшифрованный текст в списке-обменивателе, трижды кликните по нему. Чтобы выйти из списка-обменивателя, кликните по пустой части фона. Чтобы вернуться в список-обмениватель, нажмите на три полоски в правой верхней части экрана. ----------------------Также интересно знать---------------------- Ключ, который Вы вводите, превращается в хэш. Хэш -- это последовательность символов из строго ограниченного набора символов и строго определённой длины. В большинстве случаев, этот набор представляется 16-ю символами [123456789abcdef0], а длина составляет 32. Примеры обычных хэшей: - [edb2832d37afb34fd63691ee747b69d] - [166d4ef59115e65ca8226735ee3d5b] - [bcffa1eee264a5791f46182a33381] Однако в данном проекте хэш трансформируется в бинарный. Слово "бинарный" означает "двоичный", то есть "состоящий только из нулей и единиц". Пример бинарного хэша из 128 бит: [01110000101110101010011011010001011101000101101100011001000011010110101001100100111111111111011101110110010101100000100011110110] Хэширование изобретено не просто так. К нему есть требования: - необратимость: из ключа получается хэш, но из хэша ни в коем случае нельзя получить ключ - лавинный эффект: незначительное изменение ключа должно привести к полностью другому хэшу - фиксированность: любая длина ключа должна приводить к постоянной длине хэша - псевдорандом: последовательность символов в хэше должна выглядеть рандомной, а многократный ввод одного и того же ключа должен приводить к одному и тому же хэшу В этом проекте все требования к хэшу соблюдены. Здесь используется алгоритм SHA-256. Хотя, хэши этого проекта не будут совпадать с хэшами сайтов по SHA-256, потому что я не добавлял в алгоритм "бинарные дробные значения после запятой от двоичных корней первых 8 простых чисел и троичных корней первых 64 простых чисел", поскольку я считаю это небезопасным (ведь в хэше получилось бы много информации, которая мало зависит от самого ключа), в то время как в оригинальном алгоритме это используется. Имея очень мощный компьютер, Вам требуется более 17 квинтиллионов лет, чтобы перебрать все вариации хэшей структуры SHA-256. Теперь поговорим о самом шифровании. Есть такое понятие как "бинарная математика". В этом разделе математики говорится о байтовых операциях. Там есть сложение, вычитание, умножение, деление... и есть ксорирование. Для того, чтобы понять значение этого слова, придётся сначала углубиться в самые азы процессоров и ассемблеров, а именно -- в логические элементы. Что вообще из себя представляет логический элемент? Это фрагмент условия. То есть из логических элементов строится "если" (если Истина). Каждый логический элемент можно разложить на Таблицу истинности. Например, для "ИЛИ" это A B C 0 0 0 0 1 1 1 0 1 1 1 1 где A и B -- входные данные, а C -- результат (ноль и единица -- Ложь и Истина). Помимо элементов AND, OR и NOT есть множество других, и один из них -- это XOR. XOR -- это логический элемент "ИЛИ НЕ", происходящий от "Exclusive OR -- Исключающее ИЛИ" Его Таблица истинности: A B C 0 0 0 0 1 1 1 0 1 1 1 0 Его суть заключается в том, что при одинаковых входных битах результирующий бит будет ложным, а при разных входных битах результирующий бит будет истинным. Операцию, в которой мы выполняем XOR между двумя бинарными последовательностями, в узких кругах людей называют ксорированием. Допустим, у нас есть два бинарных числа: 0110110110 и 1110010011. Чтобы их проксорировать, нужно записать их друг под другом 0110110110 1110010011 и выполнить XOR для каждого столбца. Для [01] это будет 1, для [11] это будет 0... В результате получится 1000100101. Так вот, чтобы зашифровать сообщение, нам нужно не только перевести текст в двоичный вид, но и проксорировать его с хэшем. Но Вы спросите: как, если длина хэша явно не совпадает с длиной текста?
Для быстрой работы проекта перейдите в по ссылке https://turbowarp.org/992300871 (продолжение раздела "Инструкции") А я отвечу: для этого нужно ксорировать текст не просто с хэшем, а с каждой итерацией хэша. Иными словами, как только счётчик доходит до конца хэша, он должен для текста продолжить идти вперёд, а для хэша сброситься до нуля. То есть переменная относительно бинарного сообщения должна оставаться со значением 129, а для хэша стать единицей. Это легко сделать с помощью операции mod (модуль числа по отношению к другому числу, то есть Деление без остатка). Мод 127 к 128 составляет 127, а мод 129 к 128 составляет 1. Но можно сделать это в разы проще: помимо хэша создать вторую переменную, которая является копией хэша, повторяющегося на протяжении всего сообщения. В ксорировании есть интересная особенность: если A XOR B == C, то C xor B = A (двойное равно не опечатка). То есть, как в случае со сложением, где 5 + 2 = 7 и 7 - 2 = 5, так и в случае с ксорированием, где 0110 XOR 1010 = 1110 и 1110 XOR = 0110, мы наблюдаем взаимность операций до и после равно. Это значит, что расшифровка сообщения -- это тот же самый процесс, что и зашифровка. Это буквально точь в точь скопированный алгоритм зашифровки. Только помимо двоичных чисел, мой проект работает и с шестнадцатеричными. Когда Вы шифруете сообщение, Вы получаете что-то вроде 96E25CB396E65CBA96E5B3B35F4E, -- это текст в формате HEX, то есть шестнадцатеричном формате. Поэтому шифрование и дешифрование, конечно же, немного различаются. Ну а что касается QR-кода, он просто вдоль хэша каждые 2 бита представляет в виде квадратика одного из 4 цветов: 00 -- тёмный 01 -- тусклый 10 -- умеренный 11 -- светлый Спасибо Вам, если Вы дочитали до конца! ^_^ _____________________________________________ #All #Crypt #Crypto #Cryptography #Encrypt #Encryptor #Encrypter #Encryption #Encrypting #Encrypted #Decrypt #Decryptor #Decrypter #Decryption #Decrypting #Decrypted #Code #Encode #Encoder #Encoded #Encodiong #Decode #Decoder #Decoded #Decoding #Secret #Taina #Message #Messages #Chat #Online #Security #Safe #Cipher #Binary #Bin #Hex #Hash #RSA #SHA #256 #SHA-256