Ferramentas
Guias

Cifrar / Assinar RSA

Cripto

Cifra RSA-OAEP e assinatura RSASSA-PKCS1-v1_5 com Web Crypto. Gere um par de chaves ou cole uma chave PEM.

100% no cliente Sem backend
Mensagem
Assinatura
Chave (PEM)
Saída
Chave pública (PEM)
Chave privada (PEM)
Nesta página

O que é o RSA?#

O RSA é criptografia assimétrica: trabalha com um par de chaves correspondentes em vez de um segredo compartilhado. Uma chave pública pode ser distribuída a qualquer um — o seu único trabalho é trancar dados e verificar assinaturas. Uma chave privada fica consigo e é a única coisa que consegue destrancar dados encriptados com a chave pública, ou produzir uma assinatura que qualquer um pode verificar. Essa divisão é o que permite a duas partes que nunca compartilharam um segredo trocar mensagens confidenciais e provar autenticidade.

Esta página cobre as quatro operações para as quais o RSA é normalmente usado, tudo através do motor Web Crypto nativo do navegador:

  • Cifrar / Decifrar usam RSA-OAEP com SHA-256 — o esquema moderno de preenchimento autenticado. Uma mensagem curta encriptada com a chave pública só pode ser lida de volta com a chave privada.
  • Assinar / Verificar usam RSASSA-PKCS1-v1_5 com SHA-256 — o esquema de assinatura mais amplamente interoperável, o que a maioria dos JWTs e cadeias X.509 ainda usa.
  • Geração de chaves produz pares de 2048, 3072 ou 4096 bits com um expoente público de 65537, exportados como PEM padrão (SubjectPublicKeyInfo para a chave pública, PKCS#8 para a chave privada).

O RSA é deliberadamente limitado a payloads curtos. Com RSA-2048 e SHA-256, a maior mensagem que se consegue encriptar é cerca de 190 bytes; para algo maior, use a ferramenta simétrica e proteja a sua chave com RSA em vez disso.

Como usar#

  1. Gere um par. Escolha um tamanho de chave (2048 / 3072 / 4096) e clique em Gerar par de chaves. Duas caixas só de leitura preenchem-se: a chave pública e a chave privada, ambas em PEM. Copie cada uma para um sítio seguro — a chave privada é o que nunca deve compartilhar.
  2. Escolha um modo: Cifrar, Decifrar, Assinar ou Verificar.
  3. Coloque a chave certa no campo Chave conforme o modo:
    • Cifrar → cole a chave pública.
    • Decifrar → cole a chave privada.
    • Assinar → cole a chave privada.
    • Verificar → cole a chave pública.
  4. Escreva a mensagem. Para verificar, cole também a assinatura (base64) no campo de assinatura.
  5. Execute. A linha de estado reporta o resultado — para verificar, afirma explicitamente se a assinatura é válida ou inválida.

Principais funcionalidades#

  • Dois algoritmos, um par de chaves. O mesmo PEM funciona para encriptação OAEP e assinatura PKCS#1, porque o Web Crypto recebe o algoritmo na importação.
  • Saída PEM padrão. Chaves públicas são SPKI, chaves privadas são PKCS#8 — os formatos que todas as linguagens e plataformas leem nativamente.
  • Expoente público 65537. O valor universalmente escolhido; pequeno suficiente para ser rápido, grande suficiente para evitar fraquezas conhecidas.
  • Assinaturas interoperáveis. RSASSA-PKCS1-v1_5 é o formato que JWTs reais, assinatura de código e cadeias de certificados esperam.
  • Zero envios. A geração de chaves, encriptação e assinatura correm todas localmente no seu navegador; a chave privada nunca toca num servidor.

Exemplo prático#

Clique em Gerar par de chaves com 2048 selecionado. A caixa da chave pública preenche-se com um bloco PEM desta forma:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lines of base64)
-----END PUBLIC KEY-----

A caixa da chave privada preenche-se com um bloco -----BEGIN PRIVATE KEY----- mais longo. Agora mude para Cifrar, cole a chave pública no campo Chave, escreva handshake: 0x4F2A como mensagem, e execute. A saída é um único blob base64 com cerca de 344 caracteres — exatamente 256 bytes de texto cifral RSA-2048, codificados em base64.

Mude para Decifrar, cole a chave privada no campo Chave, largue esse blob no campo de mensagem, e execute: o handshake: 0x4F2A original volta. Para assinar, o mesmo fluxo com Assinar produz uma assinatura base64 de 344 caracteres que Verificar confirmará como válida contra a chave pública — e reportará como inválida se mudar um único carácter da mensagem primeiro.

FAQ#

Porque é que o RSA só consegue encriptar mensagens curtas?#

O RSA opera com números módulo do tamanho da chave. Com RSA-2048 tem-se um bloco de 256 bytes, e o preenchimento OAEP consome 2 * hashLen + 2 bytes dele (98 para SHA-256), deixando 190 bytes para a mensagem em si. Isto é por desenho — o RSA é para chaves e assinaturas, não para dados em massa. O padrão é “híbrido”: encriptar os dados em massa com AES (use a ferramenta simétrica), e depois encriptar só a chave AES com RSA.

2048, 3072 ou 4096 bits?#

2048 é a referência atual e ainda é considerada adequada para a maioria dos usos. 3072 corresponde aproximadamente a uma força simétrica de 128 bits; 4096 é a escolha conservadora para chaves que se quer que durem uma década ou mais. Cada passo acima custa tempo real na geração de chaves e em cada operação, com retornos de segurança decrescentes.

Qual é a diferença entre encriptar e assinar?#

Encriptação é sobre sigilo: a chave pública tranca, a chave privada destranca. Assinatura é sobre autenticidade: a chave privada cria a assinatura, a chave pública verifica-a. Usam o mesmo par de chaves mas algoritmos diferentes (OAEP versus PKCS#1) e respondem a perguntas diferentes — “alguém consegue ler isto?” versus “o detentor desta chave produziu mesmo isto?”.

A minha chave privada é enviada para algum lado quando a gero ou uso?#

Não. A geração, encriptação, decifragem, assinatura e verificação são todas executadas na página pelo Web Crypto. Os blocos PEM existem apenas no seu separador do navegador; nada é transmitido. Se está lidando com uma chave privada de produção, gere-a num ambiente que controle em vez de a colar numa página web.