Python HMAC

проекты Python Программирование и разработка

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

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

Пример 1

Это первый пример статьи. Сообщение и ключ (помеченные как «msgg» и key_val в нашем коде) сначала инициализируются в коде этого примера. Затем он использует ключ и алгоритм sha1 для создания кода аутентификации сообщения для данного сообщения тремя различными способами.

Сначала мы создаем экземпляр HMAC, используя метод new(), передавая ему байты для ключа и сообщения и «sha1» для алгоритма хеширования.

Метод new() генерирует экземпляр HMAC с начальным сообщением на основе байтов. Затем его можно использовать для создания кода для аутентификации сообщения. Без начального сообщения мы можем построить только экземпляр HMAC. Но для этого нам потребуется ключ и «дайджестмод».

Вызов метода update() можно использовать для добавления сообщений. Ключ должен соответствовать байтовому формату. Параметр дайджестмода принимает имена безопасных алгоритмов хеширования из модуля hashlib.

Затем распечатывается код аутентификации сообщения. Экземпляр HMAC создается без какого-либо начального сообщения во второй половине кода. После этого сообщение будет добавлено с помощью метода update(). Метод update() добавляет сообщения, переданные в качестве входных данных, к уже существующему сообщению. Мы можем вызывать этот метод несколько раз, и он будет продолжать накапливать сообщения.

Наконец, он вычисляет и печатает дайджест. Код в третьем разделе создает экземпляр HMAC без начального сообщения. Затем метод update() используется для добавления сообщений в два раздела. Наконец, он вычисляет и печатает дайджест. Наконец, код публикует дайджест и размеры блоков для каждого экземпляра HMAC.

Читайте также:  Алгоритмы 101: как реализовать обход дерева в JavaScript

Метод дайджест() возвращает код аутентификации сообщения данных. Код имеет байтовый формат. Выходной размер определяется входным алгоритмом безопасного хеширования. Если на входе используется алгоритм хеширования SHA1, на выходе будет 20 байт. Для вашего понимания концепции мы прикрепили изображение всего кода ниже.

import hmac

msgg = «Python is easy.»

key_val = «abcxyz»

hmac_one = hmac.new(key=key_val.encode(), msg=msgg.encode(), digestmod=«sha1»)

message_digest_one = hmac_one.digest()

print(«{} — Message Digest One : {}».format(hmac_one.name, message_digest_one))

hmac_two = hmac.new(key=key_val.encode(), digestmod=«sha1»)

hmac_two.update(bytes(msgg, encoding=«utf-8»))

message_digest_two = hmac_two.digest()

print(«{} — Message Digest Two : {}».format(hmac_two.name, message_digest_two))

hmac_three = hmac.new(key=key_val.encode(), digestmod=«sha1»)

hmac_three.update(bytes(«Programming is», encoding=«utf-8»))

hmac_three.update(bytes(«easy and fun», encoding=«utf-8»))

message_digest_three = hmac_three.digest()

print(«{} — Message Digest Three : {}».format(hmac_three.name, message_digest_three))

print(«\nMessage Digest Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.digest_size, hmac_two.digest_size,hmac_three.digest_size,))

print(«Message Block Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.block_size, hmac_two.block_size,hmac_three.block_size,))

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

Здесь сообщение аутентификации и размер байта отобража

Пример 2

Во втором примере мы еще раз покажем вам, как создавать коды аутентификации сообщений с использованием метода HMAC, но на этот раз с безопасным алгоритмом хеширования SHA256. Наш код для этого раздела почти идентичен коду из предыдущего примера с небольшими отличиями. Он использует ссылку библиотеки hashlib на алгоритм SHA256.

import hmac

import hashlib

msg_one = «Python is easy to learn.»

key_one = «aabbccxxyyzz»

hmac_one = hmac.new(key=key_one.encode(), msg=msg_one.encode(), digestmod=hashlib.sha256)

message_digest_one = hmac_one.digest()

print(«{} — Message Digest One : {}».format(hmac_one.name, message_digest_one))

hmac_two = hmac.new(key=key_one.encode(), digestmod=hashlib.sha256)

hmac_two.update(bytes(msg_one, encoding=«utf-8»))

message_digest_two = hmac_two.digest()

print(«{} — Message Digest Two : {}».format(hmac_two.name, message_digest_two))

hmac_three = hmac.new(key=key_one.encode(), digestmod=hashlib.sha256)

hmac_three.update(bytes(«Learn», encoding=«utf-8»))

hmac_three.update(bytes(«Python», encoding=«utf-8»))

message_digest_three = hmac_three.digest()

print(«{} — Message Digest Three : {}».format(hmac_three.name, message_digest_three))

print(«\nMessage Digest Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.digest_size, hmac_two.digest_size,hmac_three.digest_size,))

print(«Message Block Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.block_size, hmac_two.block_size,hmac_three.block_size,))

Вот результат, где вы можете видеть, что мы вычислили код аутентификации сообщения, используя алгоритм HMAC и SHA256.

езультат, где вы можете видеть, что мы вычислили код аутентифи

Пример 3

В нашем третьем примере мы покажем, как создать шестнадцатеричный код аутентификации сообщения с помощью метода HMAC и SHA256 в качестве серверной части. Код этого примера идентичен предыдущему, за исключением того, что мы используем метод hexdigest() для вычисления шестнадцатеричного кода аутентификации.

Метод hexdigest возвращает данные в виде шестнадцатеричных цифр в качестве кода проверки подлинности сообщения. Так как один байт может составить две шестнадцатеричных цифры, это так.

Выходной размер определяется входным алгоритмом безопасного хеширования. Например, если используется входной алгоритм хэширования SHA1, результирующее значение будет состоять из 40 шестнадцатеричных цифр.

import hmac

import hashlib

msg_one = «All about Python.»

key_one = «aabbccxyz»

hmac_one = hmac.new(key=key_one.encode(), msg=msg_one.encode(), digestmod=hashlib.sha512)

message_digest_one = hmac_one.hexdigest()

print(«{} — Hex Message Digest One: {}».format(hmac_one.name, message_digest_one))

hmac_two = hmac.new(key=key_one.encode(), digestmod=hashlib.sha512)

hmac_two.update(bytes(msg_one, encoding=«utf-8»))

message_digest_two = hmac_two.hexdigest()

print(«{} — Hex Message Digest Two : {}».format(hmac_two.name, message_digest_two))

hmac_three = hmac.new(key=key_one.encode(), digestmod=hashlib.sha512)

hmac_three.update(bytes(«All about «, encoding=«utf-8»))

hmac_three.update(bytes(«Python language.», encoding=«utf-8»))

message_digest_three = hmac_three.hexdigest()

print(«{} — Hex Message Digest Three : {}».format(hmac_three.name, message_digest_three))

print(«\nMessage Digest Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.digest_size, hmac_two.digest_size,hmac_three.digest_size,))

print(«Message Block Size for 1 : {}, 2 : {} and 3 : {}».format(hmac_one.block_size, hmac_two.block_size,hmac_three.block_size,))

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

Ниже приведен выходной снимок экрана, на котором вы можете видеть

Пример 4

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

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

import hmac

import hashlib

msgg = «Python Programming»

key_one = «abcabcabc»

message_digest_one = hmac.digest(key=key_one.encode(), msg=msgg.encode(), digest=«sha3_256»)

print(«Message Digest One : {}».format(message_digest_one))

message_digest_two = hmac.digest(key=key_one.encode(), msg=bytes(msgg, encoding=«utf-8»), digest=hashlib.sha3_256)

print(«Message Digest Two : {}».format(message_digest_two))

Вот результат, в котором вы можете видеть, что код аутентификации сообщения создается с использованием метода дайджеста() .

отором вы можете видеть, что код аутентификации сообщения

Заключение

HMAC — это метод аутентификации сообщений на основе криптографической хеш-функции. Широко используемый метод HMAC подробно обсуждается в этом посте. Основная идея этого подхода заключается в использовании общего секретного ключа для объединения криптографического хэша реальных данных. Это делается с единственной целью создания общего секретного ключа. Мы подробно рассмотрели эту идею и предоставили примеры, которые помогут вам понять ее.

Оцените статью
bestprogrammer.ru
Добавить комментарий