Отличия и реализация хеширования, шифрования и кодирования в Python.
Всем привет, криптография - нынешняя необходимость в нашем мире, благодаря технологиям шифрования, кодирования и хеширования наши данные с сотен различных сайтов, форумов, мессенджеров, приложений и прочих изысков настоящего мира конфиденциальны.
Я думаю хватит поливать фонтан водой, приступим и начнём с самого лёгкого, а именно хеширования!
Хеширование - но зачем.
Хеширование (от анг. hashing) - это довольно простая технология при которой ваши входные данные (Например название нашего форума “XSS”) преобразуется в нечитаемую последовательность чисел, а часто и буквенных символов, которую потом нельзя будет обратить в исходное (Входное) сообщение. Значение, которое мы получили в итоге называется хеш-суммой (Или же хеш-кодом), она используется для проверки целостности файлов (Которую мы в будущем разберём), а также для хранения файлов, которые нельзя хранить в буквенном значении.
Сейчас мы преобразуем “XSS” в хеш в формате MD5
Вывод: 2c71e977eccffb1cfb7c6cc22e0e7595
Всё довольно просто. Вообще существует не одна библиотека для преобразования текста в хеш, но hashlib наверное самая популярная и лёгкая в использовании, она может преобразовать сообщение в такие хеши как sha1, sha256, blake2b и многие другии хеши семейства SHA и BLAKE и не только.
Довольно легко, не правда ли, 2c71e977eccffb1cfb7c6cc22e0e7595’ чане?
Кодирование - слишком просто, чтобы быть правдой.
Кодирование (от анг. Code) - технология при которой входной текст преобразуется в новый при помощи алфавита кода, который будет получен в конечном итоге. Проще говоря, вспомните азбуку Морзе, где каждая буква состоит из точек и тире. Закодированный текст можно обратно преобразовать в исходное сообщение. Кодирование довольно легко спутать с шифрованием, но потом я расскажу о их отличительных особенностях и применении.
Давайте же по ещё не сложившейся традиции из “XSS” получим довольно интересный код морзе для которого нам и пригодится ранее описанная азбука.
Вывод: -..- ... …
Интересная задумка с алфавитом вышла не слишком уж сложной из за обобществления алфавитов и поэтому кодирование не так безопасно.
Шифрование - время настало.
Алгоритм шифрования представляет собой технологию при которой закодированный текст становится нечитаемым для человека у которого нет специального ключа. Шифры постоянно развиваются и как всё на свете раскрывают свою истину, новые шифры заменяют старые. Шифрование настолько велико и популярно, что образовало собой новую ветвь в информационных технологиях - криптографию. Представьте себе некую информационную ячейку содержимое которой можно открыть только специальным ключом, который выдаётся только доверенным лицам владельца ячейки.
Криптографическая система используется для защиты и хранения важной информации, первоначально использовалась в военных целях. Сейчас в интернеты пости все крипто-алгоритмы открыты, а это значит, что принцип их работы известен. А вот алгоритмы закрытых ключей неизвестны и ключи от них скрыты от публики.
Кроме открытых и закрытых крипто-ключи делятся на симметричные и асимметричные. В симметричных для расшифрования и шифрования файлов используется один и тот же ключ, для примера: Для всех действий с файлом используют один и тот же ключ mzkQ?6cOHXRLiAao.
Асимметричные ключи представляют собой алгоритм при котором для различных действий с нашим контейнером используются различные математически связанные ключи. Пара из таких ключей называется криптопарой при которой один ключ открытый и закрытый и эти два ключа взаимосвязаны между собой => зашифрованная закрытым ключом информация может быть расшифрована открытым и наоборот.
Целью данной статьи не является полность описать криптографию, а просто показать отличие между хешированием, кодированием и шифрованием. Поэтому я воссоздам симметричную и асимметричную криптосистему:
И вот наш вывод: b'e49e4db45afb07d699e3b33e520252b0f189d147cafe8363166d7d893f1b7ef2'
Чем же отличается шифрование от кодирования?
Кодирование - преобразование текста в код при помощи открытого алфавита по определенному алгоритму, код никак нельзя скрыть от других людей, перехватив закодированный текст его довольно легко декодировать, а даже если вы перехватите шифрованный текст, то не сможете его декодировать имея пароль.
Для чего же нужна соль шифру?
Соль - строка хеш, которая нужна чтобы усложнить код и как мы уже знаем из начала статьи - хеш нельзя декодировать. Пример использования соли:
И вот мы получили хеш и соль, которые в дальнейшем можно соединить.
Подведём итоги, применение данных технологий.
Начну с применения данных алгоритмов.
Хеширование: Вы настроили сервис на “На всякий случай” от Google. Если кто то не знает это сервис предоставляет доступ к близким вам лицам если вы долго им не пользуетесь, изначально этот сервер предназначался как некоторое электронное наследство близким вам людям в виде личных данных аккаунтов и прочему, но или просто ради безопасности вашего аккаунта при долгом бездействии. Вы никому не захотели отдавать свою коллекцию фотографий с кошками на вашем старом Google Drive’е. Вам пришло сообщение на телефон о том, что все данные удалятся если вы не откликнетесь, вы пропустили этот момент и ваши данные кешируются, в дальнейшем ни вы, ни Google не смогут использовать эти данные, так как кеш невозможно декодировать.
Кодирование: Все мы уже знаем о великом языке Морзе, который сильно повлиял на войны, развитие корабле ходства и общения в общем и конечно же развитии логического мышления человека.
Шифрование: Оо, оно окружает нас везде, от передачи наших электронных писем, сохранности наших паролей и конфиденциальности личной информации. Если обсуждать данную тему и влияние на современное общество, то можно сделать отдельную статью.
Заключение.
Мне очень понравилась данная тема и мне так же приятно, что вы её прочли и прошли этот путь со мной. Источники, которые использовались для создание данной статьи:
https://wikipedia.org/
http://qaru.site/
https://habr.com/ru/
https://toster.ru/
https://python-scripts.com/
Всем привет, криптография - нынешняя необходимость в нашем мире, благодаря технологиям шифрования, кодирования и хеширования наши данные с сотен различных сайтов, форумов, мессенджеров, приложений и прочих изысков настоящего мира конфиденциальны.
Я думаю хватит поливать фонтан водой, приступим и начнём с самого лёгкого, а именно хеширования!
Хеширование - но зачем.
Хеширование (от анг. hashing) - это довольно простая технология при которой ваши входные данные (Например название нашего форума “XSS”) преобразуется в нечитаемую последовательность чисел, а часто и буквенных символов, которую потом нельзя будет обратить в исходное (Входное) сообщение. Значение, которое мы получили в итоге называется хеш-суммой (Или же хеш-кодом), она используется для проверки целостности файлов (Которую мы в будущем разберём), а также для хранения файлов, которые нельзя хранить в буквенном значении.
Сейчас мы преобразуем “XSS” в хеш в формате MD5
Код:
#Для начала импортируем hashlib для работы с хешами
#Ссылку на полную документацию про hashlib я оставлю в конце статьи
import hashlib
#Задаём любое название функции, которая будет хешировать текст
xss = hashlib.md5()
#Обновляем нашу переменную, которую мы создали ранее и придаём ей любое сообщение
xss.update(b"xss")
#И выводим получившийся хеш-код
print(xss.hexdigest())
Вывод: 2c71e977eccffb1cfb7c6cc22e0e7595
Всё довольно просто. Вообще существует не одна библиотека для преобразования текста в хеш, но hashlib наверное самая популярная и лёгкая в использовании, она может преобразовать сообщение в такие хеши как sha1, sha256, blake2b и многие другии хеши семейства SHA и BLAKE и не только.
Довольно легко, не правда ли, 2c71e977eccffb1cfb7c6cc22e0e7595’ чане?
Кодирование - слишком просто, чтобы быть правдой.
Кодирование (от анг. Code) - технология при которой входной текст преобразуется в новый при помощи алфавита кода, который будет получен в конечном итоге. Проще говоря, вспомните азбуку Морзе, где каждая буква состоит из точек и тире. Закодированный текст можно обратно преобразовать в исходное сообщение. Кодирование довольно легко спутать с шифрованием, но потом я расскажу о их отличительных особенностях и применении.
Давайте же по ещё не сложившейся традиции из “XSS” получим довольно интересный код морзе для которого нам и пригодится ранее описанная азбука.
Код:
#Азбуку Морзе можно взять в любом открытом источнике
Morse = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S':
'...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.' }
Код:
#Задаём функцию decode и возвращаем её с такими значениями...
def decode(s):
return ' '.join(CODE.get(i.upper()) for i in s)
#Выводим закодированный текст
print(decode('xss'))
Вывод: -..- ... …
Интересная задумка с алфавитом вышла не слишком уж сложной из за обобществления алфавитов и поэтому кодирование не так безопасно.
Шифрование - время настало.
Алгоритм шифрования представляет собой технологию при которой закодированный текст становится нечитаемым для человека у которого нет специального ключа. Шифры постоянно развиваются и как всё на свете раскрывают свою истину, новые шифры заменяют старые. Шифрование настолько велико и популярно, что образовало собой новую ветвь в информационных технологиях - криптографию. Представьте себе некую информационную ячейку содержимое которой можно открыть только специальным ключом, который выдаётся только доверенным лицам владельца ячейки.
Криптографическая система используется для защиты и хранения важной информации, первоначально использовалась в военных целях. Сейчас в интернеты пости все крипто-алгоритмы открыты, а это значит, что принцип их работы известен. А вот алгоритмы закрытых ключей неизвестны и ключи от них скрыты от публики.
Кроме открытых и закрытых крипто-ключи делятся на симметричные и асимметричные. В симметричных для расшифрования и шифрования файлов используется один и тот же ключ, для примера: Для всех действий с файлом используют один и тот же ключ mzkQ?6cOHXRLiAao.
Асимметричные ключи представляют собой алгоритм при котором для различных действий с нашим контейнером используются различные математически связанные ключи. Пара из таких ключей называется криптопарой при которой один ключ открытый и закрытый и эти два ключа взаимосвязаны между собой => зашифрованная закрытым ключом информация может быть расшифрована открытым и наоборот.
Целью данной статьи не является полность описать криптографию, а просто показать отличие между хешированием, кодированием и шифрованием. Поэтому я воссоздам симметричную и асимметричную криптосистему:
Код:
#Импортируем модули для создания хешей и новых методов кодирования
import hashlib
import binascii
#Задаём переменной xss функцию при которой текст преобразовывается в sha256
xss = hashlib.pbkdf2_hmac(hash_name='sha256',
#потом задаём симметричный пароль
password=b'pass',
#и соль
salt=b'salt',
iterations=100000)
result = binascii.hexlify(xss)
print(result)
И вот наш вывод: b'e49e4db45afb07d699e3b33e520252b0f189d147cafe8363166d7d893f1b7ef2'
Чем же отличается шифрование от кодирования?
Кодирование - преобразование текста в код при помощи открытого алфавита по определенному алгоритму, код никак нельзя скрыть от других людей, перехватив закодированный текст его довольно легко декодировать, а даже если вы перехватите шифрованный текст, то не сможете его декодировать имея пароль.
Для чего же нужна соль шифру?
Соль - строка хеш, которая нужна чтобы усложнить код и как мы уже знаем из начала статьи - хеш нельзя декодировать. Пример использования соли:
Код:
import hashlib
#это нам уже знакомо
xss = hashlib.mb5()
xss = xss.update(“xss”)
salt = “fi7t6im8m1ge”
Подведём итоги, применение данных технологий.
Начну с применения данных алгоритмов.
Хеширование: Вы настроили сервис на “На всякий случай” от Google. Если кто то не знает это сервис предоставляет доступ к близким вам лицам если вы долго им не пользуетесь, изначально этот сервер предназначался как некоторое электронное наследство близким вам людям в виде личных данных аккаунтов и прочему, но или просто ради безопасности вашего аккаунта при долгом бездействии. Вы никому не захотели отдавать свою коллекцию фотографий с кошками на вашем старом Google Drive’е. Вам пришло сообщение на телефон о том, что все данные удалятся если вы не откликнетесь, вы пропустили этот момент и ваши данные кешируются, в дальнейшем ни вы, ни Google не смогут использовать эти данные, так как кеш невозможно декодировать.
Кодирование: Все мы уже знаем о великом языке Морзе, который сильно повлиял на войны, развитие корабле ходства и общения в общем и конечно же развитии логического мышления человека.
Шифрование: Оо, оно окружает нас везде, от передачи наших электронных писем, сохранности наших паролей и конфиденциальности личной информации. Если обсуждать данную тему и влияние на современное общество, то можно сделать отдельную статью.
Заключение.
Мне очень понравилась данная тема и мне так же приятно, что вы её прочли и прошли этот путь со мной. Источники, которые использовались для создание данной статьи:
https://wikipedia.org/
http://qaru.site/
https://habr.com/ru/
https://toster.ru/
https://python-scripts.com/