Рубрики
Без рубрики

Python 3: введение в шифрование

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Python 3 не имеет большого значения в своей стандартной библиотеке, которая занимается шифрованием. Вместо этого вы получаете хеширование библиотек. Мы посмотрим на те, которые в этой главе мы посмотрим, но основной фокус будет на следующих пакетах 3-го вечеринок: Pycrypto и Cryptography. Мы узнаем, как шифровать и расшифровать строки с обоими этими библиотеками.

Хеширование

Если вам нужен защищенные хэши или ягористы передачи сообщений, то стандартная библиотека Python вы покрыли в Hashlib модуль. Он включает в себя FIPS безопасные хеш-алгоритмы SHA1, SHA224, SHA256, SHA384 и SHA512, а также алгоритм MD5 RSA. Python также поддерживает функции HASH ADLER32 и CRC32, но это в Zlib модуль.

Одним из самых популярных использований хэшей хранит хэш пароля вместо самого пароля. Конечно, хеш должен быть хорошим, или он может быть расшифрован. Другим популярным использованием случая для хэшей является хэш-файл, а затем отправить файл и его хеш отдельно. Затем человек, получающий файл, может запустить хеш в файле, чтобы увидеть, соответствует ли он HASH, который был отправлен. Если это делает, то это означает, что никто не изменил файл в транзите.

Давайте попробуем создать хеш MD5:

Давайте займем момент, чтобы сломать это немного. Во-первых, мы импортируем Hashlib И тогда мы создаем экземпляр объекта HASH MD5. Далее мы добавляем несколько текстов в объект HASH, и мы получаем Traceback. Оказывается, что использовать хеш MD5, вы должны пройти его байтовую строку вместо обычной строки. Итак, мы попробуем это, а затем назовите это Дайджест Метод для получения нашего хеша. Если вы предпочитаете Hex Digest, мы можем сделать это тоже:

На самом деле есть ярлык методом создания хеша, поэтому мы посмотрим на это следующее, когда мы создаем наш хэш Sha512:

Как видите, мы можем создать наш хэш-экземпляр и называть его методом DiCest одновременно. Затем мы распечатаем хест, чтобы увидеть, что это такое. Я решил использовать хэш SHA1, так как у него приятное короткое хеш, которое будет соответствовать странице лучше. Но это также менее безопасно, поэтому не стесняйтесь попробовать один из остальных.

Ключевой вывод

Python имеет довольно ограниченную поддержку для ключевого вывода, встроенного в стандартную библиотеку. На самом деле единственный метод, который предоставляет Hashlib, это PBKDF2_HMAC Способ, который является функцией деривации на основе пароля PKCS # 5 2. Он использует HMAC в качестве его функции PSuedOrandom. Вы можете использовать что-то вроде этого для HASHING вашего пароля, так как он поддерживает соль и итерацию. Например, если вы должны были использовать SHA-256, вам понадобится соль не менее 16 байтов и минимум 100 000 итераций.

Помимо быстрого влога, соль – это просто случайные данные, которые вы используете в качестве дополнительного ввода в вашу хеш, чтобы сделать его сложнее, чтобы «понять» свой пароль. В основном это защищает ваш пароль из атак словаря и предварительно вычисленных радужных столов.

Давайте посмотрим на простой пример:

Здесь мы создаем хеш SHA256 на пароле, используя паршивую соль, но с 100 000 итераций. Конечно, SHA на самом деле не рекомендуется для создания ключей паролей. Вместо этого вы должны использовать что-то вроде Scrypt вместо. Еще один хороший вариант будет 3-й партийный пакет, BCRYPT. Он разработан специально с учетом паролей.

Pycryptodome

Пакет Pycrypto, вероятно, является самым известным пакетом 3-го партийных криптографии для Python. К сожалению, развитие Pycrypto, остановившись в 2012 году. Другие продолжали выпустить последнюю версию Pycryto, чтобы вы все еще можете получить его для Python 3.5, если вы не возражаете, используя двоичный двоик. Например, я нашел несколько двоичных колес Python 3.5 для Pycrypto на GitHub (https://github.com/sfbahr/pycrypto-whels).

К счастью, есть вилка проекта под названием Pycrytodome, которая является заменой для Pycrypto. Чтобы установить его для Linux, вы можете использовать следующую команду PIP:

Windows немного отличается:

Если вы столкнулись с проблемами, это, вероятно, потому что у вас нет правильных установленных зависимостей, либо вам нужен компилятор для Windows. Проверьте пикриптодому Сайт Для дополнительной помощи установки или контактной поддержки.

Также стоит отметить, что Pycryptodome имеет много улучшений по последней версии Pycrypto. Этого стоит ваше время посетить свою домашнюю страницу и посмотреть, какие новые функции существуют.

Шифрование строки

Как только вы закончите проверку их сайта, мы можем перейти к некоторым примерам. Для нашего первого трюка мы будем использовать Des для шифрования строки:

Этот код немного сбивает с толку, поэтому давайте проведем некоторое время, сломав его. Во-первых, следует отметить, что размер ключей для шифрования DES составляет 8 байтов, поэтому мы устанавливаем нашу клавишу переменной в строку буквы размера. Строка, которую мы будем ширины, должны быть кратко 8 длиной, поэтому мы создаем функцию под названием Pad Это может подумать любую струну с пробелами до тех пор, пока она не будет намного 8. Далее мы создаем экземпляр DES и некоторый текст, который мы хотим шифровать. Мы также создаем мягкую версию текста. Просто для удовольствия, мы пытаемся зашифровать оригинальный бешеный вариант строки, который поднимает ValueError Отказ Здесь мы узнаем, что нам нужна эта мягкая струна в конце концов, поэтому мы передаем это вместо этого. Как видите, у нас теперь есть зашифрованная строка!

Конечно, пример не будет завершен, если бы мы не знали, как расшифровать нашу строку:

К счастью, это очень легко сделать, так как все, что нам нужно сделать, это позвонить ** Decrypt ** meto