Poderiam me ajudar?
06/11/2012
0
Estou desenvolvendo um trabalho para a faculdade de um aplicativo em VB net em que leio os bits de uma imagem e através da técnica LSB (Least significant bit) oculto uma mensagem ou palavra desejada pelo usuário.
Os passos para a ocultação consegui fazer com êxito, cito alguns passos utilizados abaixo:
- leio a mensagem a ser oculta e a transformo em binário;
- leio os bits da imagem escolhida pelo usuário através de um laço de repetição, onde consigo os valores de RGB.
- Com esses valores lidos e armazenados em uma matriz faço a conversão para binário
- Pego os valores binários do texto lido e altero o ultimo bit de RGB para o valor correspondente do texto.
- Remonto a imagem com esses valores já com a mensagem oculta.
Ex:
Suponham que queira esconder a palavra "MARIA"... Maria em binário = 0100110101100001011100100110100101100001
A imagem escolhida pelo usuário, um bmp de 100X100 tem os seguintes valores:
R G B
168 140 120
163 140 115
160 140 112
. . .
. . .
. . .
Convertidos para binário:
10101000 10001100 01111000
10100011 10001100 01110011
10100000 10001100 01110000
. . .
. . .
. . .
Inicio a alteração do bit menos significativo, o ultimo, para os valores do texto lido:
168 EM binário = 10101000; alterando o ultimo bit para 0 (primeiro da palavra MARIA) = 10101000
140 EM binário = 10001100; alterando o ultimo bit para 1 (segundo da palavra MARIA) = 10001101
120 EM binário = 01111000; alterando o ultimo bit para 0 (terceiro da palavra MARIA) = 01111000
163 EM binário = 10100011; alterando o ultimo bit para 0 (quarto da palavra MARIA) = 10100010
140 EM binário = 10001100; alterando o ultimo bit para 1 (quinto da palavra MARIA) = 10001101
115 EM binário = 01110011; alterando o ultimo bit para 1 (sexto da palavra MARIA) = 01110011
160 EM binário = 10100000; alterando o ultimo bit para 0 (setimo da palavra MARIA) = 10100000
140 EM binário = 10001100; alterando o ultimo bit para 1 (oitavo da palavra MARIA) = 10001101
112 EM binário = 01110000; alterando o ultimo bit para 0 (nono da palavra MARIA) = 01110000
e assim sucessivamente...
A rotina de ocultação consegui realizar, porém a de descobrir, revelar qual palavra foi oculta não consigo e peço a ajuda de vocês.
O que está tornando difícil a resolução, é que quando leio esses valores de volta e pego o ultimo bit
RGB
ex: 010
011
010 <<
ele está levando um digito a mais, ou seja o 0, ficando com 9 dígitos e não 8 o que deveria ser o correto. Sei que devo fazer a leitura até o número 1 do 010 e esse 0 que ele leva a mais, devo fazer com que seja o primeiro digito da próxima letra, que no caso seria o A de (MA)RIA e assim sucessivamente, mas não consegui uma rotina de solução. Por favor, alguém poderia me ajudar?
Drayton
Posts
06/11/2012
Robson Alves
Posta o seu laço que está com problema, assim possamos atacar direto no ponto!
06/11/2012
Drayton
Segue o trecho que utilizei até o momento nessa rotina:
'FUNÇÃO QUE VAI EFETUAR A LEITURA DA IMAGEM
For i = 0 To img.Height - 1
For j = 0 To img.Width - 1
'LÊ OS PIXELS
c = img.GetPixel(i, j)
'PEGA OS VALORES DE R,G,B E OS CONVERTE PARA BINÁRIO
Dim r As String = DecToBin(c.R)
Dim g As String = DecToBin(c.G)
Dim b As String = DecToBin(c.B)
'SEPARA ESSES VALORES
For jj = 0 To 8 - 1
r1(i, j) = r(jj)
g1(i, j) = g(jj)
b1(i, j) = b(jj)
'JUNTA OS 8 BITS DA MATRIZ PARA PEGAR O PRIMEIRO DIGITO DA INFORMAÇÃO ARMAZENADA(ultimo bit)
If jj = 7 Then
r2(i, j) = r2(i, j) + r1(i, j)
g2(i, j) = g2(i, j) + g1(i, j)
b2(i, j) = b2(i, j) + b1(i, j)
If aux < 9 Then
binario = binario + r2(i, j)
aux = aux + 1
End If
If aux < 9 Then
binario = binario + g2(i, j)
aux = aux + 1
End If
If aux < 9 Then
binario = binario + b2(i, j)
aux = aux + 1
End If
A partir desse ponto não consegui mais...
13/11/2012
Robson Alves
Espero que alguem consiga de ter uma força.
Clique aqui para fazer login e interagir na Comunidade :)