Криптография с Python

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

Python предоставляет несколько очень сложных библиотек и модулей для шифрования и дешифрования данных. Некоторые из них — Cryptography, hashlib, Simple-Crypt и т. д. В статье демонстрируется использование современных методов криптографии в Python с помощью библиотеки криптографии, демонстрируя, как шифровать и дешифровать текстовые строки и файлы.

 

Установка библиотеки криптографии

Cryptography — это библиотека на языке Python, которая предоставляет пользователям различные способы криптографии; одна из них — простое шифрование и дешифрование данных. Используйте следующую команду для установки библиотеки криптографии.

ubuntu@ubuntu:~$ pip install cryptography

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

Импорт Fernet

После успешной установки модуль fernet импортируется из библиотеки. Функция берет на себя ответственность как за шифрование, так и за расшифровку данных. Для этого создайте файл python и импортируйте модуль fernet из криптографической библиотеки следующим образом:

from cryptography.fernet import Fernet

Генерация ключа

Теперь сгенерируйте ключ аутентификации, определив функцию или просто используя генератор fernet в Python. Функция Fernet.generate_key() сгенерирует ключ для шифрования и дешифрования. Добавьте в код следующую строку:

>> key = Fernet.generate_key()

 

Теперь будет создан экземпляр класса Fernet с использованием сгенерированного ключа.

>> fernet= Fernet(key)

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

Теперь для шифрования текста достаточно нескольких строк кода. Добавьте следующие строки, чтобы зашифровать текст.

>> message = “This text will be encrypted”



>> encrypted_message= fernet.encrypt(message.encode())



>> print(‘исходная текстовая строка:’, message)



>> print(‘сообщение после шифрования:’ encrypted_message)

 

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

$python main. py

original text string: This text will be encrypted message after encryption: gAAALI2cFS8dTm87KKKadrptluse5CM4t9_

 

Расшифровка текстовой строки

После шифрования строки с помощью метода шифрования хорька расшифруйте текст обратно в исходную форму. Успешное дешифрование гарантирует, что получатель может без проблем расшифровать информацию и получить к ней доступ.

Следовательно, для беспрепятственного дешифрования модули Fernet также обеспечивают простую функцию дешифрования. Добавление этих двух строк в ваш файл python плавно расшифрует одно и то же сообщение до его исходной формы.

decrypted_message=fernet.decrypt(encrypted_message).decode()



print(‘расшифрованная строка текста:’, decrypted_message )

 

В приведенных выше строках кода используется тот же экземпляр Fernet, который использует ключ, сохраненный в памяти программы, для дешифрования. Функция fernet.decrypt() возвращает закодированную строку после расшифровки, как она была закодирована до шифрования. Теперь функция декодирования возвращает закодированную строку в исходную форму.

 

Шифрование файлов

Как и при шифровании текста, импортируйте модуль fernet для шифрования файлов и генерации ключей. Импортируйте модуль fernet из библиотеки Cryptography.

from cryptography.fernet import Fernet

Генерация ключей

Как показано выше, используйте функцию генератора ключей Fernet для генерации ключа. Несмотря на то, что это лучший подход для проверки шифрования и дешифрования коротких текстов, он практически бесполезен, поскольку теряет ключ навсегда после завершения программы. Следовательно, рекомендуется безопасно хранить ключ в файле, чтобы его можно было прочитать и использовать в любое время.

Включите это, определив функцию генератора ключей в коде, который записывает ключ в файл. Это также можно сделать, сохранив ключ Fernet в текстовом файле. Создайте ключ и сохраните его в файле для использования в будущем.

>> key = Fernet.generate_key()



>> with open('keyfile.key', 'wb') as keyfile:



keyfile.write(key)

 

Этот код сгенерирует случайную буквенно-цифровую строку и сохранит ее в файле keyfile.key.

 

Шифрование

Используйте следующую строку кода, чтобы прочитать уже сохраненный ключ для шифрования файла.

>> with open('keyfile.key', 'rb') as keyfile:



>> key= keyfile.read()

 

Использование ключа для экземпляра fernet:

>> fernet= Fernet(key)

 

Откройте и прочтите файл, который нужно зашифровать, и зашифруйте данные в файле с помощью шифрования Fernet:

>> with open('list.csv', 'rb') as original_file:



original_data = original_file.read()



>> Encrypted_data= fernet.encrypt(original_data)

 

Теперь откройте файл в режиме записи и запишите зашифрованные данные обратно:

>> with open('list.csv', 'wb') as encrypted_file:



encrypted_file.write(encrypted_data)

 

При выполнении приведенного выше кода исходные данные файла заменяются массивом буквенно-цифровых строк.

 

Расшифровка файла

Снова используйте модуль Fernet, чтобы расшифровать файл с тем же ключом. Следующий код сначала считывает данные из зашифрованного файла и восстанавливает их в исходной форме с помощью функции дешифрования.

>> fernet= Fernet(key)



>> With open('list.csv', 'rb') as encrypted_file:



encrypted_data = encrypted_file.read()



>> decrypted_data = fernet.decrypt(encrypted_data)



>> with open('list.csv', 'wb') as decrypted_file:



decrypted_file.write(decrypted_data)

Заключение

Библиотека Cryptography — одна из многих библиотек и модулей, которые Python предлагает для безопасного обмена данными и шифрования. Модуль fernet библиотеки предоставляет встроенный генератор ключей и предоставляет функции шифрования и дешифрования для строки данных и больших файлов.



2021-09-01T10:02:29
Python

Как быстро стать программистом без ВУЗа?

Сейчас мир кардинально изменился,  и если еще пару лет назад все гнались за тем, чтобы получить новую профессию и закончить ВУЗ, то сегодня люди дают себе время на раздумья. Многие считают, что освоение профессии занимает много времени, если речь идет о классическом обучении в университете, то это действительно так. Однако есть и другие способы получения престижной и прибыльной профессии. К примеру, если вы мечтаете работать в сфере ИТ, то вы без проблем можете самостоятельно пройти обучение программированию онлайн.

Конечно, поступив в университет или колледж можно стать программистом 1С. Однако там вы сможете получить только устарелую теоретическую базу, которая по факту не совпадает с действительностью. ІТ — это сфера, которая постоянно развивается, поэтому вам необходимо будет самостоятельно учиться.

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

Конечно, в случае с самообразованием временные затраты будут не такими большими, как в случае с ВУЗом, однако они напрямую зависят от желаемого результата. Однако стоит добавить, что учиться нужно всегда, ведь в любой профессии со временем появляется что-то новое, и если вы хотите быть востребованным программистом, нужно следить за всеми новинками. Скорее всего вы слышали утверждение о том, что достаточно потратить всего лишь 10 000 часов для того, чтобы стать профессионалом в любой сфере. Это действительно так, однако для того, чтобы стать начинающим программистом, нужно будет потратить в разы меньше времени.

Тут все полностью индивидуально и зависит от талантов, но в большинстве случаев от 6 до 12 месяцев вполне достаточно для того, чтобы вырасти до уровня Junior в программировании.

С одной стороны, намного проще тем, у кого уже есть техническая база с колледжа или ВУЗа (желательно в математическом направлении), ведь в таком случае можно намного быстрее освоить хотя бы на начальном уровне HTML, CSS, JavaScript, фреймворки. Имея в арсенале только такие навыки вы можете смело брать первые заказы на фрилансе.

 

Работа программистом: модно или прибыльно

Перед тем, как начинать искать курсы программирования онлайн и принимать решение о кардинальной смене своей деятельности, необходимо решить, нужно ли это вам вообще. Многие идут в эту профессию исключительно из-за того, что она востребована и высокооплачиваемая. Безупречно, это так, но если вы не будете любить то, чем занимаетесь, то вряд ли с этого выйдет что-то толковое.

Но если вы все таки твердо решили идти в ИТ и хотите пройти unity 3d обучение, то эта сфера вас точно не разочарует, поскольку профессия программиста востребована на рынке. Огромное преимущество в возможности дистанционной работы.

 

Онлайн курсы программирования — современное обучение у вас дома

Ранее обучение у всех ассоциировалось с партой, старым преподавателем и тоннами ненужных лекций и конспектов по всем возможным предметам, которые по факту никогда не пригодятся. Сегодня все намного проще, ведь существуют онлайн курсы программирования. Это возможность за несколько месяцев освоить абсолютно новую, сложную и престижную профессию. Вам даже не нужно выходить из дома, чтобы получать знания или оттачивать навыки — только вы, компьютер и большое желание учиться.



2021-08-31T21:03:55
Программирование

Сброс пароля root в контейнерах LXC | Proxmox

В этой статье представлены команды для сброса пароля root в контейнерах LXC на Proxmox.




Бывает такое, что вы забрали пароль от учётной записи root в контейнерах на Proxmox. Как же быть в этой ситуации. Если в виртуальной машине на KVM можно загрузить в single режиме и сбросить пароль от root пользователя через web морду. То с LXC контейнерами этот номер не пройдет. Также я уже писал как при помощи терминала Proxmox можно сбросить пароль администратора или root пользователя в KVM контейнерах.




Для сброса пароля от root пользователя необходимо подключиться к proxmox, например через ssh, и в командной строке ввести следующее:




pct enter <VEID>
passwd <new password>
exit




Приведу пример с виртуальной машиной под номером 105




pct enter 105




после подключения к виртуальной машине вводим:




passwd new_pass
exit




  • new_pass – ваш новый пароль




После данной манипуляции пароль от контейнера в Proxmox будет изменён на новый.




Если же Вы забыли пароль от root пользователя в самом Proxmox, то для его сброса необходимо проделать немного другие мероприятия. Вот тут я уже писал как сбросить пароль от root пользователя в системе Linux.



[endtxt]




RSS




2021-08-30T17:39:44
Proxmox

Как использовать Vagrant с Libvirt в Linux

В этом руководстве мы рассмотрим, как использовать Vagrant с Libvirt в Linux. Vagrant — это программное обеспечение с открытым исходным кодом, написанное на Ruby, чтобы помочь вам создавать и поддерживать портативные виртуальные среды разработки программного обеспечения, например для VirtualBox, Hyper-V, контейнеров Docker, VMware, Libvirt и AWS. Vagrant упрощает создание, остановку и уничтожение виртуальных машин.

Самым популярным вариантом использования на локальных машинах является использование провайдера VirtualBox. Если вы являетесь пользователем KVM и QEMU, эта статья для вас. KVM, как известно, имеет лучшую производительность и меньшее использование ресурсов по сравнению с Virtualbox. Читать

Как использовать модуль Decimal в Python

В этой статье будет рассмотрена статья по использованию модуля Decimal в Python. Его можно использовать для выполнения различных математических операций с числами с плавающей запятой или числами, содержащими десятичные точки. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

 

О десятичном модуле

Десятичный модуль, как следует из названия, может использоваться для обработки чисел с десятичной запятой или чисел с плавающей запятой. Методы, включенные в этот модуль, помогают округлять десятичные числа, преобразовывать числа и выполнять арифметические вычисления. Он также уделяет большое внимание точности и точности, и каждое число после десятичной точки считается значимым. Десятичный модуль рассматривает такое число, как 1,40, как 1,40, а не как 1,4. Использование десятичного модуля можно лучше понять на примерах. Некоторые из них описаны ниже.

 

Выполнение основных математических вычислений с использованием десятичного модуля

Вы можете вызвать модуль Decimal для преобразования числа в десятичный тип в Python. В приведенном ниже примере кода показана разница между основным математическим делением чисел целочисленного типа и числами десятичного типа.

from decimal import Decimal



a = 10

b = 11

c = a / b

d = Decimal(a) / Decimal(b)

print (c, type(c))

print (d, type(d))

 

Первый оператор импортирует класс Decimal из модуля decimal. Затем создаются две переменные «a» и «b» с некоторыми значениями. Переменная «c» хранит значение, полученное путем деления переменной a на b. Затем тот же процесс повторяется путем преобразования чисел в объекты десятичного типа. После выполнения приведенного выше примера кода вы должны получить следующий результат:

0.9090909090909091 <class 'float'>

0.9090909090909090909090909091 <class 'decimal.Decimal'>

Как вы можете видеть в выходных данных выше, объект типа float показывает числа с меньшей точностью, чем объект типа decimal, поскольку он использует гораздо более агрессивный метод аппроксимации, чем объект типа decimal. По умолчанию число десятичного типа в Python показывает до 28 чисел. Вы можете изменить это значение в соответствии с вашими потребностями, вызвав метод getcontext, доступный в модуле decimal.

from decimal import Decimal

from decimal import getcontext



getcontext().prec = 50

a = 10

b = 11

c = a / b

d = Decimal(a) / Decimal(b)

print (c, type(c))

print (d, type(d))

В приведенном выше примере кода функция getcontext была импортирована, а точное положение было установлено до 50 позиций. Метод getcontext можно использовать для просмотра текущего контекста в потоке и изменения некоторых параметров конфигурации по умолчанию для десятичного модуля. После выполнения приведенного выше примера кода вы должны получить следующий результат:

0.9090909090909091 <class 'float'>

0.90909090909090909090909090909090909090909090909091 <class 'decimal.Decimal'>

Вы можете выполнять любой тип арифметических вычислений с объектами десятичного типа, которые вы можете выполнять с объектами типа float в Python. Большое количество конечных десятичных чисел в объектах десятичного типа может дать очень точные числа, которые особенно полезны в финансовых, бухгалтерских, критически важных научных приложениях и т. д.

Обратите внимание, что вы можете создавать числа десятичного типа из чисел с плавающей запятой, целых чисел и строк, содержащих числа, вызывая основной конструктор Decimal.

 

Округление чисел с помощью десятичного модуля

Модуль decimal поставляется с некоторыми предопределенными режимами округления, которые можно использовать для округления чисел с десятичными точками. Эти режимы называются ROUND_FLOOR, ROUND_CEILING, ROUND_HALF_DOWN, ROUND_HALF_UP, ROUND_UP, ROUND_DOWN, ROUND_HALF_EVEN и ROUND_05UP. Согласно официальной документации Python, вот что делает каждый из этих режимов:

  • ROUND_FLOOR: число округляется до отрицательной бесконечности.
  • ROUND_CEILING: число округляется до бесконечности или положительной бесконечности.
  • ROUND_HALF_DOWN: числа округляются до ближайшего числа. Если есть ничья, число округляется до нуля. Связи — это равноотстоящие числа, которые можно округлять как в большую, так и в меньшую сторону. Например, такое число, как 4,25, можно округлить как в сторону 4,2, так и 4,3.
  • ROUND_HALF_UP: числа округляются до ближайшего числа. Если есть ничья, число округляется от нуля.
  • ROUND_UP: число округляется от нуля.
  • ROUND_DOWN: число округляется до нуля.
  • ROUND_HALF_EVEN: числа округляются до ближайшего числа. Любые связи округляются до ближайшего четного целого числа.
  • ROUND_05UP: числа округляются от нуля, если последнее число равно 0 или 5. Если нет, то числа округляются до нуля.

В приведенном ниже примере кода показано поведение этих режимов.

import decimal

from decimal import Decimal

from decimal import getcontext



getcontext().prec = 2



getcontext().rounding = decimal.ROUND_FLOOR

print (Decimal(3.961) + Decimal(0))



getcontext().rounding = decimal.ROUND_CEILING

print (Decimal(3.961) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_DOWN

print (Decimal(3.705) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_UP

print (Decimal(3.775) + Decimal(0))



getcontext().rounding = decimal.ROUND_UP

print (Decimal(3.775) + Decimal(0))



getcontext().rounding = decimal.ROUND_DOWN

print (Decimal(3.609) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_EVEN

print (Decimal(3.665) + Decimal(0))



getcontext().rounding = decimal.ROUND_05UP

print (Decimal(3.675) + Decimal(0))

Пример кода довольно прост. Для округления чисел установлена ​​точность 2 цифры. Метод округления изменяется путем установки значения объекта «округление» (часть основного контекста). После выполнения приведенного выше примера кода вы должны получить следующий результат, в котором каждая строка соответствует соответствующему режиму округления:

3.9

4.0

3.7

3.8

3.8

3.6

3.7

3.6

Округление с использованием метода квантования

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

import decimal

from decimal import Decimal



rounded = Decimal(3.961).quantize(Decimal('1.0'), rounding=decimal.ROUND_FLOOR)

print (rounded)

Методу квантования был предоставлен показатель степени «1.0», а в качестве дополнительного аргумента был предоставлен метод округления. Он вернет число в формате XX. После выполнения приведенного выше примера кода вы должны получить следующий результат:

3.9

Сравнение двух десятичных чисел

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

from decimal import Decimal



print (Decimal(1.2).compare(Decimal(1.1)))

print (Decimal(1.0).compare(Decimal(1.1)))

print (Decimal(1.0).compare(Decimal(1.0)))

Вы можете вызвать метод сравнения для объекта десятичного типа и указать другое число в качестве аргумента. Будет возвращено значение 0, 1 или -1 в зависимости от сравниваемых чисел. Значение 0 указывает, что оба числа равны, значение 1 указывает, что первое число больше второго числа, а значение -1 указывает, что первое число меньше второго. После выполнения приведенного выше примера кода вы должны получить следующий результат:

1

- 1

0

Заключение

Хотя модуль decimal чаще всего используется для управления точностью десятичного разделителя и округления чисел после десятичной точки, он поставляется с некоторыми другими полезными методами, которые в дальнейшем можно использовать для управления десятичными числами для получения точных результатов арифметических вычислений. Базовое использование модуля decimal было рассмотрено в этой статье, и этого должно хватить для большинства ситуаций. Но вы всегда можете узнать больше о расширенных методах из официальной документации Python.



2021-08-29T22:06:23
Python

Системные платы Asus Intel серии 200 получают обновления Windows 11

Компания Asus создала веб-страницу, посвященную тому, чтобы помочь своим клиентам материнских плат подготовиться к запуску Windows 11. Хотя изображение заголовка объявляет «Готово к Windows 11» и содержит что-то вроде сертификационной наклейки, если вы читаете на ней. говорит, что «широкий спектр материнских плат Asus готов к работе с последней сборкой Windows 11 Insider Preview». Далее на странице приводится список и ссылки на новейшие файлы BIOS, некоторые из которых помечены как «в стадии тестирования», а другие — как окончательные и готовые к работе с Windows 11. Удивительно, но некоторые «довольно старые» материнские платы получают это обновление для Windows 11 …

Прокрутив страницу обновлений BIOS Asus, вы увидите, что доступность Windows 11, поддерживающей загрузку BIOS, очень обширна, а затем вы попадете в раздел, окрашенный в обратный цвет, с материнскими платами с набором микросхем Intel серии 2000 и 100. Выше в этом разделе поясняется, что «Следующие материнские платы совместимы с Windows 11 в рамках текущего тестирования. Возможность обновления зависит от поддержки со стороны операционной системы или наличия драйверов сторонних производителей». Тем не менее, видно, что существует множество материнских плат на чипсетах Asus Z270, H270 и B250 с поддержкой Windows 11. В зависимости от платы вы можете обнаружить, что поддержка описывается как полная и окончательная или как бета-версия.

Системные платы Asus Intel серии 200 получают обновления Windows 11

 

Непонятно, что Asus сделала с этими обновлениями BIOS — возможно, он просто автоматически включил TPM для перечисленных плат. В терминологии Intel TPM описывается как Intel PTT в меню BIOS в расширенной конфигурации PCH/FW, если она доступна.

В прошлом месяце руководители Microsoft, принявшие участие в сеансе AMA, заявили, что требования к оборудованию Windows 11 не будут изменены в ближайшее время. Мы знаем, что официальные минимальные системные требования для установки и использования будущей ОС включают TPM 2.0, не менее 4 ГБ ОЗУ, 64 ГБ памяти и разрешение экрана не менее 720p. Что касается процессоров, то минимальные требования Microsoft к поколению были такими: Intel Core 8- го поколения и AMD серии Ryzen 2000. Эта спецификация ЦП была ослаблена к выпуску Insider Preview, чтобы включить процессоры Core 7-го поколения и серию AMD Ryzen 1000.

Microsoft заявляет, что работает над тестированием и обратной связью, поэтому может включать более старые поколения ЦП, включенные в Insider Preview. Обновления Asus могут быть знаком от крупного партнера, что эти послабления могут остаться или даже дойти до 6-го поколения ( процессоры Core 6-го и 7-го поколений поддерживаются наборами микросхем Intel 200-й серии).



2021-08-28T23:06:45
Microsoft