Post

Esteganografia: Ocultando Informações de Forma Discreta 🔐

A esteganografia é uma técnica milenar usada para ocultar mensagens, imagens ou arquivos dentro de outros dados não secretos, permitindo a comunicação discreta e segura. Neste post, exploramos uma implementação de algoritmo para codificar e decodificar informações ocultas dentro de imagens.

Para acessar o código correspondente, visite: Github.com/ErnaneJ/pdi/steganography

Compilação e Execução 🚀

1
make main && ./main

Resultados 🖼️

Aqui estão as imagens usadas para desenvolver o algoritmo. A imagem à esquerda é a imagem principal, enquanto a da direita é a imagem que será ocultada.

Imagem PrincipalImagem Oculta
Imagem PrincipalImagem Oculta

Após o processo de esteganografia, obtemos a imagem ‘codificada’, que combina as duas imagens acima. Os bits mais significativos representam a imagem ‘sushi.jpg’, enquanto os menos significativos representam a imagem ‘biel.jpg’.

CodificarDecodificar
CodificarDecodificar

Para uma visualização mais detalhada, podemos examinar os planos de bits. Ao redefinir os bits mais significativos da imagem ‘codificada’ e deslocar os bits menos significativos, revelamos a imagem oculta.

Plano 0Plano 1Plano 2Plano 3
Plano 0Plano 1Plano 2Plano 3
Plano 4Plano 5Plano 6Plano 7
Plano 4Plano 5Plano 6Plano 7

Como desafio, recebemos uma imagem cujos bits menos significativos já representavam outra imagem. Abaixo está a imagem fornecida (esquerda) e a imagem oculta revelada pelo algoritmo (direita).

DesafioImagem Revelada
DesafioImagem Oculta

Para entender melhor como as imagens acima foram geradas, veja os logs do programa desenvolvido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
Bem-vindo ao Menu! 🌟

1️⃣  → 🔐 Codificar: Indique o caminho de duas imagens para obter como resultado a segunda imagem oculta na primeira.
2️⃣  → 🔓 Decodificar: Indique o caminho de uma imagem para obter como resultado a imagem oculta nela.
3️⃣  → 🖼️  Planos de Bits: Indique o caminho de uma imagem para obter como resultado a imagem com os planos de bits separados.
4️⃣  → ❌ Sair: Fechar o programa.

O que você gostaria de fazer? 1

-------------------------------------------------------

🔐 Codificar 🔐
 
👉 Insira o caminho da imagem portadora: ./assets/sushi.jpg
👉 Insira o caminho da imagem oculta: ./assets/biel.jpg

✅ Imagens carregadas com sucesso!

🚀 Codificando.....

🎉 Imagem codificada com sucesso!

ℹ️  A imagem 2 (./assets/biel.jpg) foi armazenada nos bits menos significativos da imagem 1 (./assets/sushi.jpg).
ℹ️  O resultado pode ser visualizado na pasta de saída (./assets/output/encode-steganography.png).

-------------------------------------------------------

Bem-vindo ao Menu! 🌟

1️⃣  → 🔐 Codificar: Indique o caminho de duas imagens para obter como resultado a segunda imagem oculta na primeira.
2️⃣  → 🔓 Decodificar: Indique o caminho de uma imagem para obter como resultado a imagem oculta nela.
3️⃣  → 🖼️  Planos de Bits: Indique o caminho de uma imagem para obter como resultado a imagem com os planos de bits separados.
4️⃣  → ❌ Sair: Fechar o programa.

O que você gostaria de fazer? 2

-------------------------------------------------------

🔓 Decodificar 🔓
 
👉 Insira o caminho da imagem codificada: ./assets/output/encode-steganography.png

✅ Imagem carregada com sucesso!

🎉 Imagem decodificada com sucesso!

ℹ️  A imagem selecionada (./assets/output/encode-steganography.png) foi decodificada.
ℹ️  O resultado pode ser visualizado na pasta de saída (./assets/output/decode-steganography.png).

-------------------------------------------------------

Bem-vindo ao Menu! 🌟

1️⃣  →

 🔐 Codificar: Indique o caminho de duas imagens para obter como resultado a segunda imagem oculta na primeira.
2️⃣  → 🔓 Decodificar: Indique o caminho de uma imagem para obter como resultado a imagem oculta nela.
3️⃣  → 🖼️  Planos de Bits: Indique o caminho de uma imagem para obter como resultado a imagem com os planos de bits separados.
4️⃣  → ❌ Sair: Fechar o programa.

O que você gostaria de fazer? 3

-------------------------------------------------------

🖼️ Planos de Bits 🖼️
 
👉 Insira o caminho da imagem: ./assets/output/encode-steganography.png

✅ Imagem carregada com sucesso!

🚀 Separando os planos de bits.....

ℹ️  A imagem será exibida em 8 janelas, cada uma mostrando um plano de bits diferente.

🖼️ Exibindo planos.

ℹ️ Plano 0 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 1 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 2 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 3 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 4 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 5 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 6 exibido. Pressione qualquer tecla para continuar.
ℹ️ Plano 7 exibido. Pressione qualquer tecla para continuar.

ℹ️ Finalizou a exibição dos planos.

🎉 Planos de bits separados com sucesso!

-------------------------------------------------------

Bem-vindo ao Menu! 🌟

1️⃣  → 🔐 Codificar: Indique o caminho de duas imagens para obter como resultado a segunda imagem oculta na primeira.
2️⃣  → 🔓 Decodificar: Indique o caminho de uma imagem para obter como resultado a imagem oculta nela.
3️⃣  → 🖼️  Planos de Bits: Indique o caminho de uma imagem para obter como resultado a imagem com os planos de bits separados.
4️⃣  → ❌ Sair: Fechar o programa.

O que você gostaria de fazer? 4

Até logo! 👋
Esta postagem está licenciada sob CC BY 4.0 pelo autor.