Sobre este projeto
it-programming / web-development
Aberto
Esteganografia, do grego "escrita escondida", é o estudo e uso de técnicas para ocultar a existência de uma
mensagem dentro de outra, uma forma de segurança por obscurantismo. Um exemplo básico de técnica
moderna de esteganografia é a alteração do bit menos significativo de cada pixel de uma imagem colorida de
forma a que ele corresponda a um bit da mensagem. Essa técnica, apesar de não ser ideal, pouco afeta o
resultado de visualização da imagem.
Fonte: Wikipédia
Para inserir uma mensagem em uma imagem, primeiramente é necessário conhecer o formato do arquivo
binário da imagem. Por questão de simplicidade, arquivos bitmap de 24 bits serão utilizados. Eles são formados
por um cabeçalho seguido de um conjunto de bytes que representam os pixels da imagem.
A primeira parte do
cabeçalho contém uma estrutura do tipo “BITMAPFILEHEADER”, descrita abaixo:
typedef struct tagBITMAPFILEHEADER {
unsigned int bfType; // Caracteres ‘B’ e ‘M’
unsigned long bfSize; // Tamanho do arquivo em bytes
unsigned int bfReserved1; // Não utilizado
unsigned int bfReserved2; // Não utilizado
unsigned long bfOffBits; // Posição do início dos dados da imagem
} BITMAPFILEHEADER;
Cada pixel é formado por 3 bytes consecutivos que representam as cores vermelho, verde e azul (RGB). Para
inserir a mensagem na imagem, utilizaremos os 2 bits menos significativos de cada cor de cada pixel. Por
exemplo, para adicionar a letra ‘A’ (65 ASCII = 01000001b):
(‘A’ >> 6) & 3 = 01 (‘A’ >> 4) & 3 = 00 (‘A’ >> 2) & 3 = 00 (‘A’ >> 0) & 3 = 01
R1 = 10011010 G1 = 00110001 B1 = 01001011 R2 = 00011100
R1 = 10011001 G1 = 00110000 B1 = 01001000 R2 = 00011101
Esse processo de escrita deve percorrer o texto caractere a caractere, até que toda a mensagem seja inserida
na imagem.
Para identificar o final da mensagem, deve-se adicionar o caractere nulo (número zero) em 4 cores
seguidas.
Para recuperar a mensagem esteganografada é preciso realizar o processo inverso, ou seja, percorrer cada cor
de cada pixel e extrair os 2 bits menos significativos. Depois, deve-se recompor o byte original e armazená-lo
em um buffer. Quando o byte recuperado for igual ao caractere nulo (número zero), a mensagem pode ser
visualizada como um texto em formato ASCII.
No exemplo abaixo, está sendo recuperado o caractere ‘m’ (109
ASCII = 01101101b).
R1 = 10011001 G1 = 00110010 B1 = 01001011 R2 = 00011101
(R1 & 3) << 6 = 01000000 (G1 & 3) << 4 = 00010000 (B1 & 3) << 2 = 00001100 (R2 & 3) << 0 = 00000001
O trabalho deve ser desenvolvido como uma ferramenta de linha de comando, onde o primeiro parâmetro é o
nome do arquivo bitmap e o segundo parâmetro é a mensagem a ser inserida. O programa deve escrever a
mensagem no bitmap conforme regras descritas acima, e salvar o novo bitmap com o mesmo nome do arquivo
original, porém, com o sufixo _stg. Caso o segundo parâmetro não seja informado, subentende-se que o bitmap
é uma imagem esteganografada, e nesse caso, o programa deve extrair a mensagem conforme regras descritas
acima e exibi-la na tela.
O programa deve obrigatoriamente ser desenvolvido em C++ e conter no mínimo as
classes GravaMensagem e MostraMensagem.
Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Alteração média
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho especificações
Disponibilidade requerida Conforme necessário
Funções necessárias Desenvolvedor
Prazo de Entrega: Não estabelecido
Habilidades necessárias