Архив метки: Python

🐍 Вычисление контрольных сумм с помощью Python и Hashlib

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

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

В Python есть удобный модуль hashlib, который позволяет вычислять различные алгоритмы контрольных сумм, такие как MD5, SHA1 и SHA256.

В этой статье мы расскажем вам о процессе вычисления контрольных сумм с помощью Python и модуля hashlib.

Шаг 1: Импортируйте необходимый модуль

Чтобы начать работу, нам нужно импортировать модуль hashlib, который предоставляет необходимые функции для вычисления контрольных сумм.

import hashlib

Шаг 2: Определение функции

Далее мы определяем функцию compute_checksums, которая принимает в качестве параметра file_path.

Эта функция будет вычислять контрольные суммы MD5, SHA1 и SHA256 для заданного файла.

def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()

Шаг 3: Открываем файл

Теперь мы открываем файл, указанный в file_path, с помощью оператора with, чтобы обеспечить правильную обработку и закрытие файла.

with open(file_path, "rb") as f:

Шаг 4. Чтение и обновление контрольных сумм

Мы читаем файл кусками по 4096 байт и обновляем контрольные суммы для каждого куска.

Такой подход эффективен для работы с большими файлами.

for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)

Шаг 5: Возврат контрольных сумм

После обработки всего файла мы возвращаем вычисленные контрольные суммы в виде словаря, содержащего значения MD5, SHA1 и SHA256.

return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

Полный код: Здесь представлен полный код, который вы можете скопировать и использовать в своей работе:

import hashlib



def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()



    with open(file_path, "rb") as f:

        for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)



    return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

Используя этот код, вы сможете вычислить контрольные суммы MD5, SHA1 и SHA256 для любого указанного вами файла.

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

см. также:

 



2023-12-20T10:50:47
Скрипты

SQL и Python: Как применяются вместе?

Python –  на данный момент один из самых популярных ЯП, и многие хотят его понять и выучить.

Возникает вопрос – с чего начать?

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

Читать

Django. Создаём простейшую CRM

Эту статью пишу специально для аргументации идей, изложенных в моей книге: realbigdata.ru. Цель описанной далее работы — оценить скорость создания собственной CRM с минимальным функционалом (спойлер: меньше часа). Читать

Как переключаться между версиями Python

Чтобы вернуться к более старой версии Python и установить ее по умолчанию, вы можете использовать update-alternatives в системах на базе Debian или манипулировать символическими ссылками. Вот как: Читать

Обновление до Python 3.12 на вашем Raspberry Pi

Послушайте, если вы разработчик на Python, который стремится к домашней автоматизации, энергетическим решениям и устойчивому развитию климата, — тогда вы знаете, что Python 3.12 абсолютно изменяющий правила игры. Особенность Raspberry Pi в том, что это не просто крошечный компьютер; это песочница для вашего воображения! А при использовании Python 3.12? О боже, тебя ждет приключение.

 

Мы довольно долго с нетерпением ждали Python 3.12, почему? — улучшенный синтаксический анализ f-строк, улучшенные сообщения об ошибках, поддержка изолированных субинтерпретаторов (только представьте возможности параллельной обработки для домашней автоматизации), и список можно продолжать!

Итак, мы приступим к его установке?

 

Во-первых, убедитесь, что ваша операционная система Raspberry Pi обновлена:

sudo apt update && sudo apt upgrade -y


 

Перейдите на официальный веб-сайт Python и возьмите исходный код Python 3.12.

wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz


 

tar -xf Python-3.12.0.tgz

cd Python-3.12.0


 

Выполните следующие команды для настройки и компиляции Python 3.12.

./configure --enable-optimizations

make -j 4

sudo make altinstall


 

И вуаля! Теперь Python 3.12 должен быть установлен.

При желании вы также можете использовать мой автоматический скрипт, но имейте в виду, что для python 3.12 будет установлена версия python по умолчанию. И это не всегда хорошо.

Все равно хотите попробовать?

wget -qO - https://raw.githubusercontent.com/tvdsluijs/sh-python-installer/main/python.sh | sudo bash -s 3.12

 

  1. Более гибкий синтаксический анализ f-строк (PEP 701)

    Представьте, как легко создавать строки в сложном формате. Это идеально подходит для регистрации данных датчиков в моих задачах домашней автоматизации.
  2. Поддержка протокола Buffer в коде Python (PEP 688)

    Я был в восторге от этого. Теперь манипулировать двоичными данными проще простого.
  3. Новый API отладки/профилирования (PEP 669)

    Отладка стала намного проще. Как тренер по гибкой разработке и владелец продукта, упрощенная отладка означает более быстрые циклы развертывания.
  4. Изолированные субинтерпретаторы с отдельными GILS (PEP 684)

    Это изменило правила игры в моих проектах по энергосбережению и домашней автоматизации. Выполнение нескольких задач параллельно? Да, пожалуйста!
  5. Улучшены сообщения об ошибках

    Для тех, кто ежедневно программирует на Python, расширенные сообщения об ошибках значительно экономят время.
  6. Поддержка Linux perf Profiler

    Теперь вы можете видеть имена функций Python непосредственно в трассировках производительности Linux.
  7. Повышение производительности

    При предполагаемом повышении общей производительности на 5% мой Raspberry Pi работает быстрее.
  8. Новый синтаксис аннотаций типов для универсальных классов (PEP 695)

    Это упрощает способ определения универсальных классов, делая ваш код более читабельным.
  9. Переопределить декоратор для методов (PEP 698)

    Это гарантирует, что метод фактически переопределяет метод в базовом классе, предотвращая незначительные ошибки.

 

  • Устаревшие методы в unittest модуле и старые модули, такие как smtpd и distutils, были удалены.
  • Теперь SyntaxWarnings предупреждает о недопустимых escape-последовательностях обратной косой черты в строках.
  • Кроме того, была удалена куча других устаревших и неработающих функций.

 

Итак, почему мы поспешили установить Python 3.12 на свой Raspberry Pi? Функции идеально соответствуют профессиональным занятиям и интересам любителей. Как разработчику на Python, вы должны всегда искать способы оптимизировать потребление энергии, оптимизировать код и внедрять инновации в области устойчивого развития. Python 3.12 с его функциями, такими как изолированные субинтерпретаторы, новый API отладки и многое другое, делает это путешествие захватывающим и результативным.

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



2023-12-01T07:56:44
Python

В чем разница между append и extend в Python?

В Python работа со списками является обычной и важной задачей для многих программистов. Списки, являясь универсальной структурой данных, предлагают несколько методов манипулирования своими элементами. Двумя такими часто используемыми методами являются append() и extend() . Хотя на первый взгляд эти методы могут показаться похожими, они служат разным целям и могут иметь значительные последствия для структуры и содержимого списка.

В этой статье мы углубимся в ключевые различия между append() и extend() в Python. Мы рассмотрим, как работает каждый метод, что происходит, когда они применяются к спискам, и когда использовать один поверх другого. К концу этого руководства у вас будет четкое представление о том, как эффективно использовать append() и extend() в вашем коде Python и принимать обоснованные решения, основанные на ваших конкретных требованиях к программированию.

 

Что такое функция append в python?

В Python функция append() является встроенным методом, который используется для добавления одного элемента в конец списка. Это один из фундаментальных методов манипулирования списками, который часто используется для динамического расширения списка путем добавления в него элементов.

В чем разница между append и extend в Python?

 

Синтаксис функции append() довольно прост:

list_name.append(повторяемый)

 

Здесь list_name — это имя списка, в который вы хотите добавить элемент.

Давайте посмотрим пример того, как использовать функцию append():

 

Инициализация пустого списка

fruits = []

 

Добавление элементов в список с помощью append()

fruits.append(‘яблоко’)

fruits.append(‘банан’)

fruits.append(‘апельсин’)

print(fruits) # Вывод: [‘яблоко’, ‘банан’, ‘апельсин’]

 

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

 

Что такое функция extend в Python?

В Python функция extend() — это встроенный метод, который используется для добавления нескольких элементов из итерируемого объекта (например, другого списка, кортежа или любой другой последовательности) в конец существующего списка. В отличие от метода append(), который добавляет только один элемент за раз, extend() позволяет добавлять несколько элементов за одну операцию.

 

Синтаксис функции extend() следующий:

list_name.extend(повторяемый)

 

Здесь list_name — это имя списка, в который вы хотите добавить элементы, а iterable — это последовательность элементов, которые вы хотите добавить в список.

Давайте посмотрим пример того, как использовать функцию extend():

 

Инициализация пустого списка

fruits = [‘яблоко’, ‘банан’]

 

Добавление элементов из другого списка с помощью extend()

additional_fruits = [‘апельсин’, ‘виноград’, ‘манго’]

fruits.extend(additional_fruits)

print(fruits) # Вывод: [‘яблоко’, ‘банан’, ‘апельсин’, ‘виноград’, ‘манго’]

 

В приведенном выше примере функция extend() используется для добавления элементов из списка additional_fruits в список fruits. В результате список fruits теперь содержит все элементы из обоих списков.

 

Разница между append и extend в Python

Вот ключевые моменты, которые являются основным различием между append и extend в python







ДобавитьРасширить
Элемент argument, указанный в качестве входных данных, добавляется в конец списка.Каждый повторяющийся элемент, предоставляемый в качестве параметра, добавляется в конец исходного списка.
Длина списка увеличивается на единицу.Длина списка увеличивается пропорционально количеству элементов в iterable.
Метод Append() имеет постоянную временную сложность O(1) Метод append() имеет постоянную временную сложность, это связано с тем, что доступ к спискам осуществляется спонтанно, самый последний элемент может быть достигнут за O (1) время, вот почему добавление любого нового элемента в конец списка занимает O (1) времени.Метод Extend() в Python показывает временную сложность, равную O(n), где переменная n демонстрирует размер итерируемого объекта, поскольку функция должна выполнять итерации по длине списка.

Сравнение Extend и Append в одной программе

Вот единственная программа, которая сравнит ключевое различие между append и extend в Python.

Реализация кода

 

# Давайте напишем программу на Python, чтобы понять

# разница между двумя обсуждаемыми методами

# первым шагом будет назначение двух списков



list_one = [2, 3, 4]

list_two = [2, 3, 4]

x = [5, 6]



# используйте два разных метода



list_one.append(x)

list_two.extend(x)



# отображение списков с помощью инструкции print.



print(list_one)



#печать второго списка



print(list_two)

 

Вывод

[2, 3, 4, [5, 6]]

[2, 3, 4, 5, 6]

 

Заключение

В заключение, понимание разницы между append() и extend() имеет решающее значение для эффективного управления списками в Python. Оба метода используются для добавления элементов в список, но они служат разным целям и имеют разные последствия для структуры и содержимого списка.

Функция append() используется для добавления отдельного элемента в конец списка. Она проста и эффективна для добавления отдельных элементов.

С другой стороны, функция extend() используется для добавления нескольких элементов из итерируемого объекта (например, другого списка, кортежа) в конец списка. Это полезно для эффективного объединения списков.

 

Часто задаваемые вопросы о разнице между append и extend в Python:

Вот несколько часто задаваемых вопросов о разнице между append и extend в Python.

1. Могут ли append() и extend() использоваться взаимозаменяемо?

Нет, append() и extend() не могут использоваться взаимозаменяемо. У них разные цели. Использование extend() для добавления одного элемента приведет к неожиданному поведению, поскольку весь итерируемый объект будет добавлен как один элемент. Аналогично, append() нельзя использовать для добавления нескольких элементов одновременно.

2. Может ли функция extend() добавлять элементы из разных типов данных?

Да, extend() может добавлять элементы из любого iterable, включая списки, кортежи, строки и другие последовательности. Пока iterable совместим со списком, его можно использовать с extend().

3. Какой метод более эффективен, append() или extend()?

Эффективность append() и extend() зависит от конкретного варианта использования. Если вам нужно добавить отдельные элементы, append() более эффективен, поскольку включает в себя одну операцию. Для добавления нескольких элементов из iterable функция extend() обычно более эффективна, чем использование цикла для добавления элементов один за другим.

4. Можно ли использовать append() и extend() в других структурах данных в Python?

Нет, append() и extend() специфичны для списков в Python. Они являются специфичными для списков методами и не могут использоваться в других структурах данных, таких как кортежи, наборы или словари.

5. Можно ли использовать append() и extend() в пустом списке?

Да, и append(), и extend() можно использовать в пустом списке. Если вы используете append() в пустом списке, он добавит указанный элемент в качестве первого элемента списка. Если вы используете extend() для пустого списка, он добавит все элементы из iterable, делая список идентичным iterable .



2023-11-30T16:21:02
Python