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.
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’.
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.
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).
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! 👋