Inicio › Herramientas para desarrolladores › Herramienta de cifrado RSA

Herramienta de cifrado RSA

Cifra un mensaje corto con una clave pública RSA y descífralo con la clave privada correspondiente, usando RSA-OAEP a través de la Web Crypto API de tu navegador. Pega claves PEM o JWK, o genera un par de claves de prueba con un clic.

Última actualización:

Haz lo mismo con OpenSSL

Todo se ejecuta localmente con la Web Crypto API; las claves y los mensajes nunca salen de esta página. Los pares de claves generados son para pruebas; para secretos reales, crea las claves en el equipo que las va a guardar.

Publicidad
Publicidad

Cómo usar Herramienta de cifrado RSA

  1. Añade las claves: pega la clave pública del destinatario para cifrar, o la clave privada para descifrar. Pulsa Generar par de claves para probar con claves de prueba nuevas.
  2. Elige el hash OAEP. SHA-256 es el valor moderno por defecto; elige SHA-1 para trabajar con código de OpenSSL, Java o .NET que usa el relleno OAEP simple.
  3. Cifrar: escribe el mensaje y pulsa Cifrar mensaje. Copia el texto cifrado en Base64 (o hexadecimal).
  4. Descifrar: cambia a la pestaña Descifrar, pega el texto cifrado y pulsa Descifrar mensaje. Se deben usar el mismo hash y la misma etiqueta en ambos lados.
  5. Comprueba la interoperabilidad con los comandos OpenSSL de Haz lo mismo con OpenSSL.

Tamaño máximo del mensaje en RSA-OAEP

Un bloque con relleno OAEP puede llevar como máximo k − 2·hLen − 2 bytes, donde k es la longitud del módulo en bytes y hLen la longitud de salida del hash (SHA-1 20, SHA-256 32, SHA-384 48, SHA-512 64 bytes). El texto cifrado siempre mide exactamente k bytes, sea cual sea la longitud del mensaje.

Tamaño de la claveTexto cifradoOAEP SHA-1OAEP SHA-256OAEP SHA-512
2048 bits256 bytes (344 caracteres Base64)214 bytes190 bytes126 bytes
3072 bits384 bytes (512 caracteres Base64)342 bytes318 bytes254 bytes
4096 bits512 bytes (684 caracteres Base64)470 bytes446 bytes382 bytes

Los tamaños se cuentan en bytes UTF-8, así que letras como é o los emojis ocupan de 2 a 4 bytes cada uno.

Formatos de clave que lee esta herramienta

EncabezadoFormatoUso
BEGIN PUBLIC KEYX.509 SubjectPublicKeyInfo (SPKI)Cifrar
BEGIN RSA PUBLIC KEYClave pública PKCS#1Cifrar
BEGIN CERTIFICATECertificado X.509 (se usa su clave pública)Cifrar
BEGIN PRIVATE KEYClave privada PKCS#8Descifrar (o cifrar mediante la clave pública derivada)
BEGIN RSA PRIVATE KEYClave privada PKCS#1 (OpenSSL tradicional)Descifrar
{"kty":"RSA", …}JSON Web Key o JWKSCifrar o descifrar

Las claves protegidas con contraseña (BEGIN ENCRYPTED PRIVATE KEY) deben desbloquearse primero con openssl pkey -in key.pem -out plain.pem. ¿Necesitas un par de claves para empezar? Usa el generador de claves RSA.

Cuándo usar el cifrado RSA

  • Secretos cortos como una contraseña, un token de API o una clave simétrica que solo debe leer el propietario de la clave privada.
  • Cifrado híbrido para cualquier cosa más larga: cifra los datos con AES-GCM (por ejemplo en la herramienta de cifrado de texto) y cifra la clave AES aleatoria con RSA.
  • No para firmas: para demostrar quién escribió un mensaje, fírmalo (RSA-PSS o ECDSA) en lugar de "cifrar con la clave privada".
  • Usa claves de 2048 bits como mínimo y de 3072 bits para datos que deban seguir siendo secretos después de 2030, según las recomendaciones de NIST SP 800-57.

Preguntas frecuentes

¿Cómo funciona el cifrado RSA?

RSA usa un par de claves. Cualquiera puede cifrar con la clave pública, pero solo quien tiene la clave privada puede descifrar. Matemáticamente, el mensaje m se convierte en c = m^e mod n con el exponente público e y el módulo n, y se recupera como m = c^d mod n con el exponente privado d. El relleno OAEP añade aleatoriedad y comprobaciones de integridad antes de ese paso.

¿Por qué el texto cifrado es distinto cada vez?

RSA-OAEP mezcla una semilla aleatoria nueva en el relleno de cada cifrado, así que el mismo mensaje y la misma clave dan un texto cifrado distinto cada vez. Es intencionado: impide que un atacante adivine el mensaje cifrando candidatos y comparándolos. Todas las versiones se descifran en el mismo texto.

¿Qué longitud puede tener el mensaje?

Un bloque RSA-OAEP admite como máximo k − 2h − 2 bytes, donde k es el tamaño de la clave en bytes y h la longitud del hash. Una clave de 2048 bits con SHA-256 admite 190 bytes; con SHA-1 admite 214 bytes. Para datos más largos, cífralos con AES y cifra solo la clave AES con RSA (cifrado híbrido).

¿Por qué falla el descifrado con un mensaje de OpenSSL o Java?

La causa más común es que el hash no coincide. openssl pkeyutl con rsa_padding_mode:oaep y RSA/ECB/OAEPPadding de Java usan SHA-1 por defecto, mientras que esta herramienta usa SHA-256 por defecto. Cambia el hash OAEP a SHA-1 y vuelve a intentarlo. Una etiqueta OAEP distinta o una clave privada incorrecta también provocan fallos.

¿Admite el relleno PKCS#1 v1.5?

No. La Web Crypto API solo ofrece RSA-OAEP para cifrar, porque el antiguo relleno de cifrado PKCS#1 v1.5 es vulnerable a ataques de oráculo de relleno. RSA-OAEP es el esquema recomendado en PKCS#1 v2.2 (RFC 8017).

¿Puedo cifrar con la clave privada y descifrar con la pública?

No con el cifrado RSA. Usar la clave privada sobre datos es firmar, lo que demuestra quién los creó en lugar de ocultarlos. Si pegas una clave privada en el campo de la clave pública, esta herramienta deriva la clave pública a partir de ella y cifra con normalidad.

¿Están seguros aquí mis claves y mensajes?

Todo se ejecuta en tu navegador con Web Crypto; no se sube ni se guarda nada. Aun así, evita pegar claves privadas de producción en cualquier página web. Los pares de claves generados sirven para pruebas y aprendizaje.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Codificadores, hashes y criptografía →