CalcMint

Criptografia e descriptografia AES

Criptografe uma mensagem com senha e descriptografe depois, ou trabalhe com chaves e IV brutos para testar seu código. Tudo acontece no seu aparelho com a API Web Crypto.

Criptografia / descriptografia AES

CompartilharXFacebookReddit
Adicione esta calculadora ao seu site

Copie o código e cole no HTML da sua página. É grátis; mantenha o link de crédito, por favor.

O que o modo senha faz

Sua senha vira uma chave de 256 bits com PBKDF2-HMAC-SHA256 e 600.000 iterações (a recomendação da OWASP), com um sal aleatório de 16 bytes. O texto é criptografado com AES-256-GCM sob um nonce aleatório de 12 bytes, e o resultado é sal + nonce + texto cifrado + tag de 16 bytes, em Base64. Criptografar o mesmo texto duas vezes dá resultados diferentes, e isso é esperado.

Descriptografar em outro lugar leva poucas linhas, por exemplo em Python com o pacote cryptography:

import base64
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

data = base64.b64decode(cifrado)
sal, nonce, corpo = data[:16], data[16:28], data[28:]
chave = PBKDF2HMAC(hashes.SHA256(), 32, sal, 600_000).derive(senha.encode())
print(AESGCM(chave).decrypt(nonce, corpo, None).decode())

AES em resumo

O AES (FIPS 197) é a cifra de bloco padronizada pelo NIST em 2001. Ele criptografa blocos de 16 bytes com chave de 128, 192 ou 256 bits, e o modo define como os blocos se encadeiam: CBC precisa de preenchimento e IV aleatório, CTR transforma o AES numa cifra de fluxo e GCM adiciona uma tag de autenticação que detecta qualquer alteração. Perder a senha ou a chave é perder os dados: não há como recuperar.

Perguntas frequentes

Qual opção escolher?

Para suas mensagens, o modo senha padrão (AES-256-GCM): ele é autenticado, então detecta senha errada ou texto adulterado. Use o formato OpenSSL/CryptoJS para trocar dados com código que usa CryptoJS.AES ou openssl enc, e a chave bruta para bater com uma implementação específica.

Dá para descriptografar aqui um texto que começa com U2FsdGVkX1?

Sim, se você souber a senha. U2FsdGVkX1 é “Salted__” em Base64, o cabeçalho gravado pelo CryptoJS e pelo OpenSSL. As derivações antiga (MD5) e nova (SHA-256) são testadas automaticamente.

Por que não tem modo ECB?

Os navegadores não oferecem porque é inseguro: blocos iguais de texto geram blocos iguais de cifra e vazam padrões. Use CBC, CTR ou, melhor ainda, GCM.

O que eu colo é enviado para um servidor?

Não. Esta ferramenta roda inteiramente no seu navegador, com JavaScript e a API Web Crypto embutida. Nada do que você digita, cola ou abre é enviado ou guardado.

Calculadoras relacionadas