https://github.com/ericlps/esteganografia-java
este projeto é uma aplicação em Java desenvolvida para realizar esteganografia digital em imagens no formato PNG, utilizando a técnica LSB (Least Significant Bit - Bit Menos Significativo). Ele permite ocultar dados (arquivos ou pastas compactadas em ZIP) dentro de uma imagem e, posteriormente, extrair esses dados da imagem modificada
https://github.com/ericlps/esteganografia-java
cibersecurity command-line-interface cryptography data-hiding esteganografia image-processing java lsb maven png steganography
Last synced: about 2 months ago
JSON representation
este projeto é uma aplicação em Java desenvolvida para realizar esteganografia digital em imagens no formato PNG, utilizando a técnica LSB (Least Significant Bit - Bit Menos Significativo). Ele permite ocultar dados (arquivos ou pastas compactadas em ZIP) dentro de uma imagem e, posteriormente, extrair esses dados da imagem modificada
- Host: GitHub
- URL: https://github.com/ericlps/esteganografia-java
- Owner: EricLps
- Created: 2025-06-21T15:08:54.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-21T15:58:32.000Z (about 1 year ago)
- Last Synced: 2025-06-21T16:36:19.762Z (about 1 year ago)
- Topics: cibersecurity, command-line-interface, cryptography, data-hiding, esteganografia, image-processing, java, lsb, maven, png, steganography
- Language: Java
- Homepage:
- Size: 2.83 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Documentação do Projeto: Esteganografia LSB em Java ☕
## 🎯 Visão Geral
Este projeto consiste em uma **aplicação em Java** desenvolvida para realizar **esteganografia digital** em imagens no formato **PNG**, utilizando a técnica **LSB (Least Significant Bit - Bit Menos Significativo)**. Sua principal funcionalidade é permitir a **ocultação de dados** (arquivos ou pastas compactadas em ZIP) dentro de uma imagem e, posteriormente, a **extração** desses mesmos dados da imagem modificada.
### O que é Esteganografia LSB?
A esteganografia é a arte e a ciência de **escrever mensagens ocultas** de tal forma que ninguém, além do remetente e do receptor pretendidos, suspeite da existência da mensagem.
A técnica **LSB** envolve a inserção de bits dos dados a serem ocultados nos **bits menos significativos** dos pixels de uma imagem. Como esses bits são os que menos contribuem para o valor total de uma cor, sua alteração resulta em uma **mudança visualmente imperceptível** na imagem original. Isso garante que a imagem esteganografada mantenha a sua aparência.
---
## ✨ Funcionalidades Principais
O projeto oferece dois modos de operação distintos:
* **Modo Embed (Ocultar Dados):**
* **Entrada:** Recebe uma imagem PNG de base e o caminho para a pasta/arquivos que você deseja ocultar.
* **Compactação Automática:** Os dados fornecidos são automaticamente compactados em um arquivo ZIP.
* Gera um cabeçalho (4 bytes) contendo o tamanho do arquivo ZIP para facilitar a recuperação.
* **Geração de Cabeçalho:** Um cabeçalho de 4 bytes é gerado, contendo o tamanho exato do arquivo ZIP compactado. Isso é crucial para a recuperação posterior.
* **Ocultação LSB:** O conteúdo do ZIP (incluindo o cabeçalho) é convertido em uma sequência de bits. Esses bits substituem os **bits menos significativos (LSB)** dos canais de cor (Vermelho, Verde, Azul) de cada pixel da imagem PNG.
* **Saída:** Uma nova imagem PNG é gerada e salva, contendo os dados ocultos de forma imperceptível.
* **Modo Extract (Recuperar Dados):**
* **Entrada:** Recebe uma imagem PNG que previamente teve dados ocultos.
* **Leitura LSB:** A aplicação lê os bits menos significativos de cada canal RGB dos pixels da imagem.
* **Reconstrução do Cabeçalho:** Os primeiros bits extraídos são utilizados para reconstruir o cabeçalho, permitindo determinar o tamanho dos dados ocultos.
* **Reconstrução do ZIP:** A sequência de bytes do arquivo ZIP original é remontada.
* **Saída:** O arquivo ZIP recuperado é salvo e descompactado automaticamente em um diretório de saída especificado, revelando os arquivos originais.
---
## 💡 Como Funciona (Detalhes Técnicos)
* **Formato da Imagem**: O formato **PNG (Portable Network Graphics)** é o único suportado. Ele foi escolhido por ser um formato de imagem **sem perdas (lossless)**. Essa característica é **crucial para a esteganografia LSB**, pois a compressão com perdas (como o JPEG) introduziria artefatos que danificariam ou destruiriam os dados ocultos.
* **Capacidade de Ocultação**: Cada pixel de uma imagem RGB possui 3 canais de cor (Vermelho, Verde, Azul). Ao utilizar 1 bit LSB por canal, cada pixel é capaz de carregar **3 bits de dados ocultos**.
* **Exemplo de Capacidade**: Para uma imagem de 3MB, a capacidade de ocultação estimada é de aproximadamente **368KB**, embora o valor exato dependa das dimensões em pixels da imagem.
* Cabeçalho de Dados: Um **cabeçalho de 4 bytes** é estrategicamente prefixado aos dados ZIP. Este cabeçalho armazena o **tamanho exato em bytes do arquivo ZIP oculto**. Isso é fundamental para que o processo de extração saiba precisamente quantos bits precisa ler da imagem para recuperar todo o arquivo ZIP, evitando a leitura de dados irrelevantes ou incompletos.
---
## 📂 Estrutura do Projeto
A organização do projeto segue uma estrutura de pacotes lógica, visando a separação clara das responsabilidades e a manutenibilidade do código:
````
├── src/
│ └── main/
│ └── java/
│ └── com/
│ └── example/
│ └── steganography/
│ ├── exceptions/
│ │ └── SteganographyException.java # Exceção personalizada
│ ├── DataConverter.java # Lógica de ZIP e conversão byte<->bit
│ ├── ImageProcessor.java # Lógica de leitura/escrita/pixel da imagem
│ ├── MainApplication.java # Ponto de entrada e interface CLI
│ ├── SteganographyUtils.java # Lógica principal de embed/extract
│ └── ui/ # (Opcional) Para futura interface gráfica
├── target/ # Diretório de build do Maven (ignorados pelo Git)
├── resources/ # Recursos do projeto (imagens de teste, etc.)
│ ├── input/
│ │ └── img_teste.png # Exemplo de imagem de entrada
│ └── output/ # Diretório para imagens de saída geradas
├── data/ # Exemplo de diretório para dados a serem ocultados
├── temp/ # Exemplo de diretório para arquivos ZIP temporários
├── extracted_data/ # Exemplo de diretório para dados extraídos
├── pom.xml # Arquivo de configuração do Maven
└── Readme.md # Este arquivo
````
---
## 🚀 Primeiros Passos: Configuração e Execução
Para configurar e executar o projeto em sua máquina local, siga os passos abaixo:
### Pré-requisitos
Certifique-se de ter as seguintes ferramentas instaladas em seu sistema:
* **Java Development Kit (JDK) 11 ou superior** (Recomendado: JDK 21).
* Verifique com ``java -version`` e ``javac -version``.
* **Apache Maven 3.6.0 ou superior.**
* Verifique com ``mvn -version``.
* Importante: Se o Maven não estiver instalado ou não estiver no seu PATH, siga as instruções de instalação para seu sistema operacional e configure as variáveis de ambiente (``M2_HOME`` e adicione ``%M2_HOME%\bin`` ao ``Path`` no Windows, ou similar no Linux/macOS).
* **Git** (para clonar o repositório).
### Clonando o Repositório
```bash
git clone https://github.com/EricLps/esteganografia-java.git
cd esteganografia
````
### Construindo o Projeto
Navegue até a raiz do projeto (onde o ``pom.xml`` está localizado) e use o Maven para construir o projeto. Certifique-se de que o seu pom.xml esteja configurado conforme o exemplo mais recente fornecido (incluindo o **maven-assembly-plugin**).
````
mvn clean install
````
Este comando irá compilar o código-fonte, executar a fase de ``package`` e gerar o arquivo JAR executável (``esteganografia.jar``) dentro do diretório ``target/``.
### Executando a Aplicação
Após a construção bem-sucedida, você pode executar a aplicação a partir do terminal:
````
java -jar target/esteganografia.jar
````
A aplicação apresentará um menu interativo no console.
**1. Ocultar Dados (Modo Embed)**
Escolha a opção 1 no menu e siga as instruções no console. Você precisará fornecer os caminhos completos para os arquivos/diretórios.
**Exemplo de Interação:**
````
Sua escolha: 1
--- MODO OCULTAR DADOS ---
Caminho da imagem PNG original: C:\caminho\para\seu\projeto\esteganografia\resources\input\minha_imagem_original.png
Caminho da pasta/arquivo a ser ocultado (e.g., /caminho/para/pasta_secreta ou /caminho/para/arquivo.txt): C:\caminho\para\seu\projeto\esteganografia\data\meus_arquivos_secretos
Caminho temporário para o arquivo ZIP gerado (e.g., ./temp/hidden_data.zip): C:\caminho\para\seu\projeto\esteganografia\temp\dados_ocultos.zip
Caminho para salvar a imagem com dados ocultos (e.g., ./output/imagem_oculta.png): C:\caminho\para\seu\projeto\esteganografia\output\minha_imagem_oculta.png
Iniciando ocultação de dados...
Imagem original carregada: C:\caminho\para\seu\projeto\esteganografia\resources\input\minha_imagem_original.png
Dados compactados em ZIP. Tamanho: XXX bytes.
Cabeçalho gerado. Tamanho: 4 bytes.
Dados (com cabeçalho) convertidos para YYY bits.
Capacidade da imagem suficiente. Bits a ocultar: YYY, Capacidade disponível: ZZZ
Dados ocultados na imagem. Bits processados: YYY
Imagem com dados ocultos salva em: C:\caminho\para\seu\projeto\esteganografia\output\minha_imagem_oculta.png
Ocultação concluída com sucesso!
````
**Observações Importantes para Ocultação:**
- **Caminhos**: Sempre utilize caminhos absolutos e completos para arquivos e pastas para evitar erros de localização.
- **Imagem Original**: Deve ser um arquivo **PNG válido**.
- **Dados a Ocultar**: Pode ser um único arquivo (ex: ``C:\caminho\para\arquivo.txt)`` ou uma pasta inteira (ex: ``C:\caminho\para\minha_pasta)``. A aplicação fará a compactação automática para ZIP.
- **Caminho Temporário do ZIP**: Forneça o caminho incluindo o nome do arquivo ZIP (ex: ``...\temp\nome_do_zip.zip)``. Certifique-se de que o diretório pai (ex: temp/) exista.
- **Caminho da Imagem de Saída**: Forneça o caminho **incluindo o nome da nova imagem PNG** (ex: ``...\output\nova_imagem.png``). Certifique-se de que o diretório pai (ex: output/) exista.
**2. Extrair Dados (Modo Extract)**
Escolha a opção ``2`` no menu e siga os prompts no console.
**Exemplo de Interação:**
````
Sua escolha: 2
--- MODO EXTRAIR DADOS ---
Caminho da imagem PNG com dados ocultos: C:\caminho\para\seu\projeto\esteganografia\output\minha_imagem_oculta.png
Caminho do diretório para salvar os dados extraídos (e.g., ./extracted_files): C:\caminho\para\seu\projeto\esteganografia\extracted_data
Iniciando extração de dados...
Imagem esteganografada carregada: C:\caminho\para\seu\projeto\esteganografia\output\minha_imagem_oculta.png
Cabeçalho (bits) extraído.
Tamanho do arquivo ZIP a ser extraído: XXX bytes.
Total de bits a extrair: YYY
Todos os YYY bits de dados (cabeçalho + ZIP) extraídos.
Dados ZIP convertidos para bytes. Tamanho: XXX bytes.
Dados descompactados com sucesso para: C:\caminho\para\seu\projeto\esteganografia\extracted_data
Extração concluída com sucesso! Verifique a pasta: C:\caminho\para\seu\projeto\esteganografia\extracted_data
````
### Observações Importantes:
- **Imagem com Dados Ocultos**: Deve ser a imagem PNG que foi gerada pelo modo "Embed".
- **Diretório de Saída**: Forneça o caminho para uma pasta onde os arquivos extraídos serão salvos (ex: ``C:\caminho\para\seu\projeto\esteganografia\extracted_data)``. A aplicação **criará a pasta se ela não existir**.
---
⚠️ Tratamento de Erros
A aplicação implementa um robusto **tratamento de erros** utilizando a **exceção personalizada** **SteganographyException*. Esta exceção é lançada para gerenciar problemas como:
- Arquivo de imagem não encontrado ou em formato inválido.
- Imagem de entrada com tamanho insuficiente para ocultar os dados desejados.
- Erros de **IO (Input/Output)** durante operações de arquivo (leitura e escrita).
- Problemas na estrutura dos dados ocultos (por exemplo, um cabeçalho inválido que impede a correta leitura do tamanho do arquivo ZIP).
**Mensagens de erro detalhadas** serão exibidas diretamente no console caso algum problema ocorra, auxiliando na depuração.
## 🤝 Como Contribuir
Contribuições para este projeto são **muito bem-vindas**! Se você encontrar bugs, tiver sugestões de melhoria ou quiser adicionar novas funcionalidades, sinta-se à vontade para:
- Abrir uma Issue no repositório para relatar bugs ou propor novas ideias.
- Abrir um Pull Request com suas contribuições de código.
## 📧 Contato
Se você tiver dúvidas ou sugestões, sinta-se à vontade para entrar em contato:
Eric Lopes
eric.lwinkelmann@gmail.com