En este artículo, aprenderemos sobre el cifrado y descifrado y los implementaremos con Python.
Cifrado:
El cifrado es el proceso de codificación de los datos. es decir, convertir texto sin formato en texto cifrado. Esta conversión se realiza con una clave denominada clave de cifrado.
Descifrado:
El descifrado es el proceso de decodificación de los datos codificados. Convertir el texto cifrado en texto plano. Este proceso requiere una clave que usamos para el cifrado.
Requerimos una clave para el cifrado. Hay dos tipos principales de claves que se utilizan para el cifrado y el descifrado. Son clave simétrica y clave asimétrica.
Cifrado de clave simétrica:
En el cifrado de clave simétrica, los datos se codifican y decodifican con la misma clave. Esta es la forma más fácil de encriptación, pero también menos segura. El receptor necesita la clave para el descifrado, por lo que se necesita una forma segura de transferir claves. Cualquiera con la clave puede leer los datos en el medio.
Ejemplo:
Instale la biblioteca de criptografía de python con el siguiente comando.
pip install cryptography
Pasos:
- Importación Fernet
- Luego genere una clave de cifrado, que se puede usar para cifrar y descifrar.
- Convierta la string en una string de bytes, para que pueda cifrarse.
- Instancia la clase Fernet con la clave de cifrado.
- Luego encripta la string con la instancia de Fernet.
- Luego, se puede descifrar con la instancia de la clase Fernet y se debe instanciar con la misma clave utilizada para el cifrado.
Python3
from cryptography.fernet import Fernet # we will be encrypting the below string. message = "hello geeks" # generate a key for encryption and decryption # You can use fernet to generate # the key or use random key generator # here I'm using fernet to generate key key = Fernet.generate_key() # Instance the Fernet class with the key fernet = Fernet(key) # then use the Fernet class instance # to encrypt the string string must # be encoded to byte string before encryption encMessage = fernet.encrypt(message.encode()) print("original string: ", message) print("encrypted string: ", encMessage) # decrypt the encrypted string with the # Fernet instance of the key, # that was used for encrypting the string # encoded byte string is returned by decrypt method, # so decode it to string with decode methods decMessage = fernet.decrypt(encMessage).decode() print("decrypted string: ", decMessage)
Producción:
Cifrado de clave asimétrica:
En el cifrado de clave asimétrica, utilizamos dos claves, una clave pública y una clave privada. La clave pública se utiliza para cifrar los datos y la clave privada se utiliza para descifrar los datos. Por el nombre, la clave pública puede ser pública (se puede enviar a cualquier persona que necesite enviar datos). Nadie tiene su clave privada, por lo que nadie en el medio puede leer sus datos.
Ejemplo:
Instale la biblioteca rsa de python con el siguiente comando.
pip install rsa
Pasos:
- Importar biblioteca rsa
- Genere claves públicas y privadas con el método rsa.newkeys().
- Codifique la string a string de bytes.
- Luego, cifre la string de bytes con la clave pública.
- Luego, la string cifrada se puede descifrar con la clave privada.
- La clave pública solo se puede usar para cifrar y la privada solo se puede usar para descifrar.
Python3
import rsa # generate public and private keys with # rsa.newkeys method,this method accepts # key length as its parameter # key length should be atleast 16 publicKey, privateKey = rsa.newkeys(512) # this is the string that we will be encrypting message = "hello geeks" # rsa.encrypt method is used to encrypt # string with public key string should be # encode to byte string before encryption # with encode method encMessage = rsa.encrypt(message.encode(), publicKey) print("original string: ", message) print("encrypted string: ", encMessage) # the encrypted message can be decrypted # with ras.decrypt method and private key # decrypt method returns encoded byte string, # use decode method to convert it to string # public key cannot be used for decryption decMessage = rsa.decrypt(encMessage, privateKey).decode() print("decrypted string: ", decMessage)
Producción: