En el panorama digital actual, proteger los datos confidenciales es crucial tanto para las personas como para las organizaciones. El cifrado RSA (Rivest-Shamir-Adleman) se destaca como una solución sólida para proteger los datos. Es un algoritmo de cifrado asimétrico, lo que significa que utiliza un par de claves: una clave pública para el cifrado y una clave privada para el descifrado. Uno de los principales beneficios del cifrado RSA es que nunca es necesario compartir la clave privada, lo que minimiza el riesgo de que se vea comprometida.
Este artículo explora cómo utilizar el cifrado RSA en tres lenguajes de programación populares: JavaScript, Python y PHP, lo que facilita la protección de datos en aplicaciones multiplataforma.
Imagine que está creando una aplicación web donde la información confidencial (como datos de autenticación o detalles personales) debe transmitirse de forma segura entre el cliente (front-end) y el servidor (back-end). Por ejemplo, puedes cifrar un mensaje en el lado del cliente en JavaScript y luego descifrarlo en el servidor usando Python o PHP.
RSA es ideal para este escenario porque proporciona la flexibilidad de cifrado en un idioma y descifrado en otro, lo que garantiza la compatibilidad entre plataformas.
JavaScript (Next.js con JSEncrypt)
Cifrado:
import JSEncrypt from 'jsencrypt'; // Function to encrypt a message using a public key const encryptWithPublicKey = (message) => { const encryptor = new JSEncrypt(); const publicKey = process.env.NEXT_PUBLIC_PUBLIC_KEY.replace(/\\n/g, "\n"); encryptor.setPublicKey(publicKey); const encryptedMessage = encryptor.encrypt(message); return encryptedMessage; };
Descifrado:
import JSEncrypt from 'jsencrypt'; // Function to decrypt a message using a private key const decryptWithPrivateKey = (encryptedMessage) => { const decryptor = new JSEncrypt(); const privateKey = process.env.PRIVATE_KEY.replace(/\\n/g, "\n"); decryptor.setPrivateKey(privateKey); const decryptedMessage = decryptor.decrypt(encryptedMessage); return decryptedMessage; };
Explicación:
Cifrado de clave pública: La biblioteca JSEncrypt cifra el mensaje utilizando la clave pública. Esto garantiza que solo la clave privada correspondiente pueda descifrarlo.
Descifrado de clave privada: El mensaje se descifra con la clave privada, que se almacena de forma segura en una variable de entorno.
Consideración de seguridad: Al utilizar RSA, nos aseguramos de que los datos enviados desde el cliente estén cifrados y sean seguros.
Python (usando la biblioteca rsa)
Cifrado:
import rsa import base64 def encrypt_with_public_key(message: str, public_key_str: str) -> str: public_key = rsa.PublicKey.load_pkcs1_openssl_pem(public_key_str.encode()) encrypted_message = rsa.encrypt(message.encode(), public_key) return base64.b64encode(encrypted_message).decode()
Descifrado:
import rsa import base64 def decrypt_with_private_key(encrypted_message: str, private_key_str: str) -> str: private_key = rsa.PrivateKey.load_pkcs1(private_key_str.encode()) encrypted_bytes = base64.b64decode(encrypted_message.encode()) decrypted_message = rsa.decrypt(encrypted_bytes, private_key) return decrypted_message.decode()
Explicación:
Cifrado de clave pública: El mensaje se cifra utilizando una clave pública, lo que garantiza que solo el titular de la clave privada pueda descifrarlo.
Codificación Base64: Después del cifrado, el mensaje se codifica en Base64 para garantizar la compatibilidad con la transmisión de texto.
Descifrado de clave privada: La clave privada se utiliza para descifrar el mensaje cifrado con codificación Base64, lo que garantiza la confidencialidad.
PHP (usando OpenSSL)
Cifrado:
function encrypt_with_public_key($message) { $publicKey = getenv('PUBLIC_KEY'); openssl_public_encrypt($message, $encrypted, $publicKey); return base64_encode($encrypted); }
Descifrado:
function decrypt_with_private_key($encryptedMessage) { $privateKey = getenv('PRIVATE_KEY'); $encryptedData = base64_decode($encryptedMessage); openssl_private_decrypt($encryptedData, $decrypted, $privateKey); return $decrypted; }
Explicación:
Cifrado de clave pública: La función openssl_public_encrypt cifra el mensaje utilizando la clave pública, garantizando que solo la clave privada pueda descifrarlo.
Descifrado de clave privada: La función openssl_private_decrypt descifra el mensaje utilizando la clave privada, lo que garantiza que la información confidencial permanezca segura.
Variables de entorno: Tanto la clave pública como la privada se almacenan de forma segura en variables de entorno, lo que mejora la seguridad.
Utilice variables de entorno: Guarde siempre sus claves en variables de entorno en lugar de codificarlas en su aplicación. Esto reduce el riesgo de exponer información confidencial.
Cifrar datos confidenciales: Cifre datos personales y confidenciales, como contraseñas, detalles financieros o información de identificación personal (PII, por sus siglas en inglés) para evitar el acceso no autorizado.
Utilice HTTPS: Asegúrese de que su aplicación se comunique a través de HTTPS para proteger los datos en tránsito.
Administración segura de claves: Rote periódicamente las claves de cifrado y asegúrese de que estén almacenadas de forma segura.
Seguridad de datos mejorada: El cifrado RSA garantiza que los datos confidenciales se mantengan seguros durante la transmisión, evitando el acceso no autorizado.
Cifrado asimétrico: RSA utiliza una clave pública para el cifrado y una clave privada para el descifrado, lo que garantiza que nunca sea necesario compartir la clave privada.
Compatibilidad multiplataforma: RSA funciona perfectamente en diferentes plataformas y lenguajes de programación, lo que lo hace ideal para aplicaciones web donde se utilizan diferentes tecnologías en el lado del cliente y del servidor.
El cifrado RSA ofrece una forma confiable de proteger datos confidenciales en múltiples entornos de programación. Al implementar el cifrado y descifrado RSA en JavaScript, Python y PHP, puede proteger la información confidencial, mejorar la seguridad y garantizar la compatibilidad entre plataformas. Ya sea para proteger las llamadas API, salvaguardar los datos del usuario o garantizar la confidencialidad de los mensajes, RSA proporciona una solución de cifrado sólida.
Si esta guía te resultó útil, considera compartirla con otros desarrolladores y permanece atento para obtener más información sobre el cifrado y la seguridad de los datos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3