0Pricing
Java Academy · Aula

Criptografia simétrica AES

Criptografe e descriptografe dados confidenciais com AES/CBC/PKCS5Padding usando a API javax.crypto do Java.

Criptografia simétrica AES é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

Criptografia simétrica versus assimétrica

A criptografia simétrica utiliza a mesma chave para criptografar e descriptografar (é rápida e adequada para grandes volumes de dados). A assimétrica utiliza um par de chaves pública e privada (é mais lenta e usada para troca de chaves e assinaturas). AES é a cifra simétrica padrão.

Modos do AES: CBC versus GCM

O AES possui vários modos. AES/CBC/PKCS5Padding é comum, mas não oferece autenticação. AES/GCM/NoPadding fornece criptografia e autenticação (AEAD) — sendo fortemente preferível em código novo.

Gerando uma chave AES

Utilize KeyGenerator para gerar uma chave AES de 256 bits com segurança.

KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");

Criptografia AES/GCM

O modo GCM exige um vetor de inicialização (IV) exclusivo de 12 bytes para cada criptografia. Gere um novo IV aleatório em cada operação de criptografia — nunca reutilize um IV com a mesma chave.

byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)

Descriptografia AES/GCM

Extraia o IV dos dados armazenados, reconstrua a especificação e descriptografe. O GCM verifica automaticamente a autenticidade — dados adulterados lançam AEADBadTagException.

// Assume stored = iv + ciphertext:
byte[] iv         = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tampered

Armazenando o IV com o texto cifrado

O IV não é secreto — armazene-o antes do texto cifrado ou junto dele. O destinatário precisa do IV para descriptografar. A chave deve permanecer secreta.

byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv,         0, encryptedData, 0,          iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);

Derivação de chave a partir de senha (PBKDF2)

Nunca utilize uma senha diretamente como chave AES — sua entropia é baixa demais. Derive uma chave com PBKDF2 usando um salt aleatório e um número alto de iterações.

PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");

Utilizando o provedor de segurança do Java

O provedor padrão do JDK gerencia o AES. Para obter algoritmos adicionais ou conformidade com FIPS, utilize o provedor Bouncy Castle.

// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");

Padrão de criptografia de envelope

Criptografe os dados com uma chave de criptografia de dados (DEK) gerada aleatoriamente. Criptografe a DEK com uma chave de criptografia de chaves (KEK) armazenada em um KMS (AWS KMS, HashiCorp Vault). Isso limita a exposição das chaves.

AES em aplicações Spring

O TextEncryptor do Spring Security ou o módulo Spring Security Crypto fornece criptografia AES de alto nível sem exigir o gerenciamento manual de Cipher ou IV.

TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);

Armadilhas comuns

Nunca: reutilize um IV com a mesma chave, utilize o modo ECB (os padrões são preservados), use uma senha diretamente como chave ou ignore a tag de autenticação. Utilize sempre GCM em código novo.

Verificação rápida

O que AES/GCM fornece que AES/CBC não fornece?

Recapitulação

Utilize AES/GCM/NoPadding para obter criptografia autenticada. Gere um novo IV aleatório de 12 bytes para cada criptografia. Acrescente o IV ao texto cifrado. Derive chaves a partir de senhas com PBKDF2. Nunca reutilize um IV com a mesma chave.

Perguntas Frequentes

A aula “Criptografia simétrica AES” é grátis?

Sim — o texto completo de “Criptografia simétrica AES” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Criptografia simétrica AES”?

Criptografe e descriptografe dados confidenciais com AES/CBC/PKCS5Padding usando a API javax.crypto do Java. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Criptografia simétrica AES”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Hash criptográfico com MessageDigest
  2. Criptografia simétrica AES
  3. HMAC-SHA256 para integridade de mensagens
  4. JWT: estrutura, criação e verificação
← Voltar para Java Academy