hmac – Keyed-Hashing para la autenticación de mensajes

HMAC es un mecanismo para la autenticación de mensajes que utiliza funciones hash criptográficas. HMAC se puede utilizar con cualquier función hash criptográfica iterativa, por ejemplo, MD5, SHA-1, en combinación con una clave secreta compartida.
Este módulo implementa el algoritmo HMAC. La idea básica es generar un hash criptográfico de los datos reales combinados con una clave secreta compartida. El hash resultante se puede usar para verificar el mensaje transmitido o almacenado para determinar un nivel de confianza, sin transmitir la clave secreta.

 hmac.new(key, msg=None, digestmod=None) 

Devuelve un nuevo objeto hmac. key es un objeto bytes o bytearray que proporciona la clave secreta. Si msg está presente, se realiza la actualización de la llamada al método (msg). digestmod es el nombre del resumen, el constructor del resumen o el módulo para que lo use el objeto HMAC. Admite cualquier nombre adecuado para hashlib.new().

Un objeto HMAC tiene los siguientes métodos:

  1. HMAC.update(msg): este método actualiza el objeto hmac con msg. Las llamadas repetidas equivalen a una sola llamada con la concatenación de todos los argumentos: m.update(a); m.update(b) es equivalente a m.update(a + b).
  2. HMAC.digest(): este método devuelve el resumen de los bytes pasados ​​al método update() hasta el momento. Este objeto de bytes tendrá la misma longitud que el digest_size del resumen dado al constructor.
  3. HMAC.hexdigest(): este método es como el método digest() excepto que el resumen se devuelve como una string con el doble de longitud que contiene solo dígitos hexadecimales.
  4. HMAC.copy(): este método devuelve una copia o un clon del objeto hmac. Esto se puede usar para calcular de manera eficiente los resúmenes de strings que comparten una substring inicial común.

Un objeto hash tiene los siguientes atributos:

  • HMAC.digest_size: el tamaño del resumen HMAC resultante en bytes.
  • HMAC.block_size: el tamaño de bloque interno del algoritmo hash en bytes.
  • HMAC.name: el nombre canónico de este HMAC. por ejemplo, hmac-sha1.

Ejemplo:

# Python 3 code to demonstrate the working of hmac module.
  
import hmac
import hashlib
  
# creating new hmac object using sha1 hash algorithm
digest_maker = hmac.new(b'secret-key', b'msg', hashlib.sha1)
  
# print the Hexdigest of the bytes passed to update
print ("Hexdigest: " + digest_maker.hexdigest())
  
# call update to update msg
digest_maker.update(b'another msg')
  
# print the Hexdigest of the bytes passed to update
print ("Hexdigest after update: " + digest_maker.hexdigest())
  
print ("Digest size: " + str(digest_maker.digest_size) + " bytes")
print ("Block size: " + str(digest_maker.block_size) + " bytes")
print ("Canonical name: " + digest_maker.name)
  
# print the digest of the bytes passed to update
print ("Digest: ", end =" ")
print (digest_maker.digest())
  
# create a copy of the hmac object
digest_clone = digest_maker.copy()
print ("Hexdigest of clone: " + digest_clone.hexdigest())

Producción:

Hexdigest: df2ae7cdb5c849001e33ee29eb1c51ba2cafbaa7
Hexdigest after update: 3923273eb3aa9328478eb5aabf2d96e185256b4b
Digest size: 20 bytes
Block size: 64 bytes
Canonical name: hmac-sha1
Digest:  b"9#'>\xb3\xaa\x93(G\x8e\xb5\xaa\xbf-\x96\xe1\x85%kK"
Hexdigest of clone: 3923273eb3aa9328478eb5aabf2d96e185256b4b

Este artículo es una contribución de Mayank Agrawal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *