{"id":28944061,"url":"https://github.com/ericlps/esteganografia-java","last_synced_at":"2026-04-28T17:02:04.043Z","repository":{"id":300426501,"uuid":"1006132300","full_name":"EricLps/esteganografia-java","owner":"EricLps","description":"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","archived":false,"fork":false,"pushed_at":"2025-06-21T15:58:32.000Z","size":2964,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T16:36:19.762Z","etag":null,"topics":["cibersecurity","command-line-interface","cryptography","data-hiding","esteganografia","image-processing","java","lsb","maven","png","steganography"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EricLps.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-21T15:08:54.000Z","updated_at":"2025-06-21T15:58:35.000Z","dependencies_parsed_at":"2025-06-21T16:36:26.225Z","dependency_job_id":"0fdd5e7c-0e8b-4492-b9af-c066030a9f0d","html_url":"https://github.com/EricLps/esteganografia-java","commit_stats":null,"previous_names":["ericlps/esteganografia-java"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EricLps/esteganografia-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricLps%2Festeganografia-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricLps%2Festeganografia-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricLps%2Festeganografia-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricLps%2Festeganografia-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EricLps","download_url":"https://codeload.github.com/EricLps/esteganografia-java/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricLps%2Festeganografia-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32390067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cibersecurity","command-line-interface","cryptography","data-hiding","esteganografia","image-processing","java","lsb","maven","png","steganography"],"created_at":"2025-06-23T05:17:09.013Z","updated_at":"2026-04-28T17:02:04.020Z","avatar_url":"https://github.com/EricLps.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Documentação do Projeto: Esteganografia LSB em Java ☕\n\n## 🎯 Visão Geral\n\nEste 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.\n\n### O que é Esteganografia LSB? \n\nA 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.\n\nA 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.\n\n---\n\n## ✨ Funcionalidades Principais\nO projeto oferece dois modos de operação distintos:\n\n* **Modo Embed (Ocultar Dados):**\n    * **Entrada:** Recebe uma imagem PNG de base e o caminho para a pasta/arquivos que você deseja ocultar.\n    * **Compactação Automática:** Os dados fornecidos são automaticamente compactados em um arquivo ZIP.\n    * Gera um cabeçalho (4 bytes) contendo o tamanho do arquivo ZIP para facilitar a recuperação.\n    * **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.\n    * **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.\n    * **Saída:** Uma nova imagem PNG é gerada e salva, contendo os dados ocultos de forma imperceptível.\n\n* **Modo Extract (Recuperar Dados):**\n    * **Entrada:** Recebe uma imagem PNG que previamente teve dados ocultos.\n    * **Leitura LSB:** A aplicação lê os bits menos significativos de cada canal RGB dos pixels da imagem.\n    * **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.\n    * **Reconstrução do ZIP:** A sequência de bytes do arquivo ZIP original é remontada.\n    * **Saída:** O arquivo ZIP recuperado é salvo e descompactado automaticamente em um diretório de saída especificado, revelando os arquivos originais.\n \n---\n\n## 💡 Como Funciona (Detalhes Técnicos)\n\n* **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.\n* **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**.\n    * **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.\n      \n* 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.\n\n---\n\n## 📂 Estrutura do Projeto\n\nA organização do projeto segue uma estrutura de pacotes lógica, visando a separação clara das responsabilidades e a manutenibilidade do código:\n\n````\n├── src/\n│   └── main/\n│       └── java/\n│           └── com/\n│               └── example/\n│                   └── steganography/\n│                       ├── exceptions/\n│                       │   └── SteganographyException.java  # Exceção personalizada\n│                       ├── DataConverter.java           # Lógica de ZIP e conversão byte\u0026lt;-\u003ebit\n│                       ├── ImageProcessor.java          # Lógica de leitura/escrita/pixel da imagem\n│                       ├── MainApplication.java         # Ponto de entrada e interface CLI\n│                       ├── SteganographyUtils.java      # Lógica principal de embed/extract\n│                       └── ui/                          # (Opcional) Para futura interface gráfica\n├── target/                 # Diretório de build do Maven (ignorados pelo Git)\n├── resources/              # Recursos do projeto (imagens de teste, etc.)\n│   ├── input/\n│   │   └── img_teste.png   # Exemplo de imagem de entrada\n│   └── output/             # Diretório para imagens de saída geradas\n├── data/                   # Exemplo de diretório para dados a serem ocultados\n├── temp/                   # Exemplo de diretório para arquivos ZIP temporários\n├── extracted_data/         # Exemplo de diretório para dados extraídos\n├── pom.xml                 # Arquivo de configuração do Maven\n└── Readme.md               # Este arquivo\n````\n\n---\n\n## 🚀 Primeiros Passos: Configuração e Execução\n\nPara configurar e executar o projeto em sua máquina local, siga os passos abaixo:\n\n### Pré-requisitos\n\nCertifique-se de ter as seguintes ferramentas instaladas em seu sistema:\n\n* **Java Development Kit (JDK) 11 ou superior** (Recomendado: JDK 21).\n    * Verifique com ``java -version`` e ``javac -version``.\n* **Apache Maven 3.6.0 ou superior.**\n    * Verifique com ``mvn -version``.\n    * 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).\n* **Git** (para clonar o repositório).\n\n### Clonando o Repositório\n\n```bash\ngit clone https://github.com/EricLps/esteganografia-java.git\ncd esteganografia\n````\n\n### Construindo o Projeto\nNavegue 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**).\n\n````\nmvn clean install\n````\n\nEste 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/``.\n\n### Executando a Aplicação\nApós a construção bem-sucedida, você pode executar a aplicação a partir do terminal:\n\n````\njava -jar target/esteganografia.jar\n````\nA aplicação apresentará um menu interativo no console.\n\n**1. Ocultar Dados (Modo Embed)**\n\nEscolha a opção 1 no menu e siga as instruções no console. Você precisará fornecer os caminhos completos para os arquivos/diretórios.\n\n**Exemplo de Interação:**\n\n````\nSua escolha: 1\n--- MODO OCULTAR DADOS ---\nCaminho da imagem PNG original: C:\\caminho\\para\\seu\\projeto\\esteganografia\\resources\\input\\minha_imagem_original.png\nCaminho 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\nCaminho temporário para o arquivo ZIP gerado (e.g., ./temp/hidden_data.zip): C:\\caminho\\para\\seu\\projeto\\esteganografia\\temp\\dados_ocultos.zip\nCaminho para salvar a imagem com dados ocultos (e.g., ./output/imagem_oculta.png): C:\\caminho\\para\\seu\\projeto\\esteganografia\\output\\minha_imagem_oculta.png\nIniciando ocultação de dados...\nImagem original carregada: C:\\caminho\\para\\seu\\projeto\\esteganografia\\resources\\input\\minha_imagem_original.png\nDados compactados em ZIP. Tamanho: XXX bytes.\nCabeçalho gerado. Tamanho: 4 bytes.\nDados (com cabeçalho) convertidos para YYY bits.\nCapacidade da imagem suficiente. Bits a ocultar: YYY, Capacidade disponível: ZZZ\nDados ocultados na imagem. Bits processados: YYY\nImagem com dados ocultos salva em: C:\\caminho\\para\\seu\\projeto\\esteganografia\\output\\minha_imagem_oculta.png\nOcultação concluída com sucesso!\n````\n\n**Observações Importantes para Ocultação:**\n\n- **Caminhos**: Sempre utilize caminhos absolutos e completos para arquivos e pastas para evitar erros de localização.\n- **Imagem Original**: Deve ser um arquivo **PNG válido**.\n- **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.\n- **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.\n- **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.\n\n\n**2. Extrair Dados (Modo Extract)**\n\nEscolha a opção ``2`` no menu e siga os prompts no console.\n\n**Exemplo de Interação:**\n\n````\nSua escolha: 2\n--- MODO EXTRAIR DADOS ---\nCaminho da imagem PNG com dados ocultos: C:\\caminho\\para\\seu\\projeto\\esteganografia\\output\\minha_imagem_oculta.png\nCaminho do diretório para salvar os dados extraídos (e.g., ./extracted_files): C:\\caminho\\para\\seu\\projeto\\esteganografia\\extracted_data\nIniciando extração de dados...\nImagem esteganografada carregada: C:\\caminho\\para\\seu\\projeto\\esteganografia\\output\\minha_imagem_oculta.png\nCabeçalho (bits) extraído.\nTamanho do arquivo ZIP a ser extraído: XXX bytes.\nTotal de bits a extrair: YYY\nTodos os YYY bits de dados (cabeçalho + ZIP) extraídos.\nDados ZIP convertidos para bytes. Tamanho: XXX bytes.\nDados descompactados com sucesso para: C:\\caminho\\para\\seu\\projeto\\esteganografia\\extracted_data\nExtração concluída com sucesso! Verifique a pasta: C:\\caminho\\para\\seu\\projeto\\esteganografia\\extracted_data\n````\n\n### Observações Importantes:\n\n- **Imagem com Dados Ocultos**: Deve ser a imagem PNG que foi gerada pelo modo \"Embed\".\n- **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**.\n\n---\n\n⚠️ Tratamento de Erros\n\nA aplicação implementa um robusto **tratamento de erros** utilizando a **exceção personalizada** **SteganographyException*. Esta exceção é lançada para gerenciar problemas como:\n\n- Arquivo de imagem não encontrado ou em formato inválido.\n- Imagem de entrada com tamanho insuficiente para ocultar os dados desejados.\n- Erros de **IO (Input/Output)** durante operações de arquivo (leitura e escrita).\n- Problemas na estrutura dos dados ocultos (por exemplo, um cabeçalho inválido que impede a correta leitura do tamanho do arquivo ZIP).\n\n**Mensagens de erro detalhadas** serão exibidas diretamente no console caso algum problema ocorra, auxiliando na depuração.\n\n## 🤝 Como Contribuir\nContribuiçõ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:\n\n- Abrir uma Issue no repositório para relatar bugs ou propor novas ideias.\n- Abrir um Pull Request com suas contribuições de código.\n\n## 📧 Contato\nSe você tiver dúvidas ou sugestões, sinta-se à vontade para entrar em contato:\n\nEric Lopes\neric.lwinkelmann@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericlps%2Festeganografia-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericlps%2Festeganografia-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericlps%2Festeganografia-java/lists"}