UFRGS
– UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
INF01124 – Classificação e Pesquisa de Dados
Projeto Final - 2003/1
Leonardo Kunz - 2027/02-2
A Esteganografia consiste em ocultar informação de tal forma que sua existência não seja percebida. Ao contrário da criptografia, ela não pode ser detectada.
Arquivos como os de imagem e som possuem áreas de dados que não são usadas ou são pouco significativas. A esteganografia tira proveito disso, trocando essas áreas por informação.
O objetivo deste trabalho é criar um programa que utilize arquivos de imagem para ocultar textos.
DETALHES DA IMPLEMENTAÇÃO
Uma imagem é formada por um conjunto de pixels, nos quais sua cor é formada por três canais (vermelho, verde e azul) de 8 bits cada um. Alterando-se o bit menos significativo não ocorrem mudanças perceptíveis na imagem. Assim é possível codificar em uma imagem uma seqüência de dígitos binários que contenha um texto usando apenas o bit menos significativo de cada componente (canal) da cor dos pixels.
Para codificar o texto numa seqüência de dígitos binários foi usada a codificação de Huffman.
A codificação de Huffman é uma forma de compressão de dados em que representa-se cada um dos caracteres de um texto com códigos binários de comprimento variável. O tamanho do código varia conforme a freqüência com que ocorre no texto, atribuindo-se códigos menores aos caracteres mais freqüentes e maiores aos menos freqüentes.
Inicialmente o programa lê o texto e calcula a freqüência com que cada um dos caracteres aparece. Assume-se que cada um é uma árvore de um nodo apenas. Pesquisa-se, então, os dois com menor freqüência e combina-os para formar uma árvore. A freqüência dos dois é somada e atribuída à raiz. Repete-se esta etapa até que haja uma única árvore. No final, teremos uma árvore com os caracteres do texto na folhas. Para termos o código de cada um basta convencionar para um nodo qualquer 0 se for um filho à esquerda e 1 à direita. O código do dígito será o caminho percorrido da raiz até a folha.
Exemplo:




Para que a decodificação pode ser realizada é necessário incluir a árvore. Por isso, no início da seqüência de bits do arquivo de imagem, é gravada a lista de caracteres da árvore em percorrimento pré-ordem. No exemplo acima, teríamos:
@@a@bdc
Como @ indica um nodo com dois filhos e os outros caracteres representam folhas, é possível reconstruir a árvore a partir dessa string de caracteres.
Na parte inicial do arquivo de imagem é gravada a string da árvore em binário seguida de um caractere especial que indica o fim da árvore e o início da seqüência codificada.
Antes da codificação do texto, é acrescentado um outro caractere especial que indica o fim da frase. Ele é incluído na árvore assim como os outros caracteres mais terá a função de indicar para o programa o fim da frase e conseqüentemente o fim da leitura dos bits da imagem na decodificação.
FUNCIONAMENTO DO PROGRAMA

Para codicar um texto em uma imagem deve-se abrir um arquivo bmp clicando no menu Imagem -> Abrir Imagem. Em seguida, deve-se digitar um texto ou abrir um arquivo de texto no menu Texto -> Abrir arquivo de texto e clicar no botão Codifica. Deve-se, então, salvar a imagem com o texto codificado.
Após a codificação, o programa exibe no lado direito informações sobre a codificação:
- Número de bits com compressão: Número total de bits usados para que o texto fosse codificado com o algoritmo de Huffman.
- Número de bits sem compressão: Número de bits que seriam necessários caso não fosse utilizada compressão de Huffman.
Para textos pequenos em geral o número de bits necessários com o algoritmo de Huffman é maior do que sem o algoritmo, pois a codificação inclui a árvore de Huffman. Mas para casos em que o texto é grande o algoritmo é bem eficiente.
Para decodificar uma mensagem oculta em uma imagem, deve-se primeiro abri-la no menu Imagem e clicar em Decodificar. O texto aparecerá em seguida, podendo ser salvo em um arquivo .txt no menu Texto.
Exemplo de uma imagem com texto codificado:


Imagem original Imagem com texto codificado
Downloads:
OBS: As arquivos de imagem usados devem ser bitmaps de 24 bits.
Email: lkunz@viavale.com.br