security
app.utils.security
Módulo de Python con funciones para el manejo de sistemas de criptografía, generación de uuid4, sha512, base64 y claves de cifrado basados en aes-256 y otros.
Para más información, te recomendamos leer la documentación del Proyecto.
- https://cryptography.io/en/latest/
- https://cryptography.io/en/latest/hazmat/primitives/aead/
- https://docs.python.org/3.11/library/secrets.html
- https://docs.python.org/3.11/library/hashlib.html
Warning
este módulo:
- se encuentra en revisión, puede cambiar en el futuro.
- se necesitan más pruebas y ejemplos.
get_private_key()
Genera un objeto bytes
a partir de una cadena de dígitos hexadecimales, en este caso la variable de entorno PRIVATE_KEY_HASH
.
Notes
Si desea generar una nueva clave se recomienda utilizar la función generate_salt
con el costo por defecto de 32 bytes
Returns:
Type | Description |
---|---|
Optional[bytes] | un objeto |
generate_uuid(remove_dash=False, use_crypto=False)
Genera un UUID
basado en uuid.uuid4()
ó secrets.token_hex(16)
según las opciones enviadas.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
remove_dash | bool | si se envía en verdadero( | False |
use_crypto | bool | si se envía en verdadero ( | False |
Warning
Se desaconseja el uso de secrets.token_hex(16)
.
- el parámetro
use_crypto
será eliminado en futuras versiones.
Returns:
Type | Description |
---|---|
Optional[str] | un UUID de 32 caracteres ó |
base64_encode(text)
Genera un base64
del texto enviado, por defecto se usa el encoding utf8
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
text | Any | el texto a cifrar | required |
Returns:
Type | Description |
---|---|
Any | el texto cifrado en base64, ó |
base64_decode(text)
Decodifica un base64
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
text | Any | el texto a descifrar | required |
Returns:
Type | Description |
---|---|
Any | el texto original (objeto plano), ó |
generate_salt(cost=DEFAULT_COST)
Genera una cadena de bytes aleatorios de tamaño adecuado para uso criptográfico. Por defecto se establece el valor de costo a DEFAULT_COST
, es decir, 32 bytes
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
cost | (int, optional, DEFAULT_COST) | el valor del costo en bytes, por defecto | DEFAULT_COST |
Returns:
Type | Description |
---|---|
Optional[str] | una cadena que representa los bytes aleatorios, ó |
generate_digest(key_digest)
Genera un string sha512
basado en hashlib.sha512
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
key_digest | Any | un objeto de cualquier tipo (usualmente texto) para generar el | required |
Returns:
Type | Description |
---|---|
Optional[str] | el string ( |
encrypt_message(message, tag=None)
Encripta un mensaje (usualmente un string) utilizando AESGCM(aes-256-gcm)
se basa en una llave privada proporcionada por la función get_private_key
, un nonce
de al menos 32 bits de longitud y opcionalmente un tag
.
Notes
tenga en cuenta que sí se utiliza un tag
para cifrar datos, ese mismo tag debe ser enviado para descrifrar los datos posteriormente, ya que no se almacena en la data cifrada.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message | str | el texto a cifrar | required |
tag | str | un tag adicional mejorar el cifrado, por defecto | None |
Returns:
Type | Description |
---|---|
Any | un objeto en |
decrypt_message(message, tag=None)
Desencripta un mensaje (usualmente un base64) con los datos necesarios para tal fin, tenga en cuenta que sí se utilizó un tag
para cifrar datos, ese mismo tag debe ser enviado a esta función descrifrar los datos.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message | str | el mensaje a descifrar, usualmente un | required |
tag | str | un tag adicional mejorar el cifrado, por defecto | None |
Returns:
Type | Description |
---|---|
Any | el mesage decodificado, ó |
hash_from_dict(data)
genera un hash de un diccionario, usando sha512
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data | dict | el diccionario | required |
Returns:
Type | Description |
---|---|
str | el hash generado, ó |
Examples: