Fernet (cifrado simétrico) utilizando el módulo de Criptografía en Python

La criptografía es la práctica de asegurar información útil mientras se transmite de una computadora a otra o se almacenan datos en una computadora. La criptografía se ocupa del cifrado de texto sin formato en texto cifrado y el descifrado de texto cifrado en texto sin formato. Python admite un paquete de criptografía que nos ayuda a cifrar y descifrar datos. El módulo fernet del paquete de criptografía tiene funciones integradas para la generación de la clave, el cifrado de texto sin formato en texto cifrado y el descifrado de texto cifrado en texto sin formato utilizando los métodos de cifrado y descifrado, respectivamente. El módulo fernet garantiza que los datos cifrados con él no se puedan manipular ni leer sin la clave. 

Métodos utilizados:

  • generar_clave(): este método genera una nueva clave fernet. La clave debe mantenerse segura ya que es el componente más importante para descifrar el texto cifrado. Si se pierde la clave, el usuario ya no podrá descifrar el mensaje. Además, si un intruso o un pirata informático obtiene acceso a la clave, no solo puede leer los datos, sino también falsificarlos.
  • encrypt(data) : Cifra los datos pasados ​​como parámetro al método. El resultado de este cifrado se conoce como «token de Fernet», que es básicamente el texto cifrado. El token cifrado también contiene la marca de tiempo actual cuando se generó en texto sin formato. El método de cifrado lanza una excepción si los datos no están en bytes.

Parámetros:

  • datos (bytes): el texto sin formato que se va a cifrar.

Valor devuelto: un texto cifrado que no se puede leer ni modificar sin la clave. Está codificado en base64 seguro para URL y se conoce como token Fernet.

  • decrypt(token,ttl=None) : este método descifra el token de Fernet pasado como parámetro al método. En el descifrado exitoso, se obtiene el texto sin formato original como resultado; de lo contrario, se lanza una excepción.

Parámetros:

  • token (bytes): el token de Fernet (texto cifrado) se pasa para el descifrado.
  • ttl (int): opcionalmente, se puede proporcionar un número entero como segundo parámetro en el método de descifrado. El ttl indica el tiempo de validez de un token. Si el token tiene más de ttl segundos (desde el momento en que se creó originalmente), se genera una excepción. Si no se pasa ttl como parámetro, no se tiene en cuenta la antigüedad del token. Si el token no es válido de alguna manera, se lanza una excepción.

Valor devuelto:   Devuelve el texto sin formato original.

Pasos para escribir el programa:

Al principio, el paquete de criptografía debe instalarse con el siguiente comando:

pip install cryptography

Python3

# Fernet module is imported from the 
# cryptography package
from cryptography.fernet import Fernet
  
# key is generated
key = Fernet.generate_key()
  
# value of key is assigned to a variable
f = Fernet(key)
  
# the plaintext is converted to ciphertext
token = f.encrypt(b"welcome to geeksforgeeks")
  
# display the ciphertext
print(token)
  
# decrypting the ciphertext
d = f.decrypt(token)
  
# display the plaintext
print(d)

Producción:

b’gAAAAABfYMSL3Cjz8I8Sg7NwatdtTvOtqHtPrNDGXTGx4w1gW-9yvrMBUFz3bAWnwVk2WjcOrhjfAzyX7Z6M1IDbcRDhxPvd2dKPjypVv9hLQ1lARWdf-RE=’
b’bienvenido a geeksforgeeks’

La salida descifrada tiene una ‘b’ delante del mensaje original que indica el formato de byte. Sin embargo, esto se puede eliminar usando el método decode() mientras se imprime el mensaje original. El siguiente programa implementa el método decode(). 

Python3

# Fernet module is imported from the 
# cryptography package
from cryptography.fernet import Fernet
  
  
# key is generated
key = Fernet.generate_key()
  
# value of key is assigned to a variable
f = Fernet(key)
  
# the plaintext is converted to ciphertext
token = f.encrypt(b"welcome to geeksforgeeks")
  
# display the ciphertext
print(token)
  
# decrypting the ciphertext
d = f.decrypt(token)
  
# display the plaintext and the decode() method 
# converts it from byte to string
print(d.decode())

Producción:

b’gAAAAABfYMTfbEYTSsU6BCyXr9ArUIbPELTu5axUtWRfIxc4zzv3AktmOwdNSd1rH_zrL4Qz7tDi1K067kLx0Ma3S828nSTJlP9Y7L0_ZfVyCelZlayGK3k=’
bienvenido a geeksforgeeks

Publicación traducida automáticamente

Artículo escrito por Shreyasi_Chakraborty 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 *