Poderiam me ajudar?

06/11/2012

0

Pessoal, boa tarde!

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

Drayton

Responder

Posts

06/11/2012

Robson Alves

Cara, você praticamente terminou seu trabalho!

Posta o seu laço que está com problema, assim possamos atacar direto no ponto!
Responder

06/11/2012

Drayton

Oi Robson, obrigado pela atenção....

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...
Responder

13/11/2012

Drayton

E aí pessoal? Alguma ideia?
Responder

13/11/2012

Drayton

E aí pessoal? Alguma ideia?
Responder

13/11/2012

Robson Alves

Cara eu não consegui pensar em nada, fora que levei um tempo pra entender a sintaxe do VB, onde fecha e começa o outro for...

Espero que alguem consiga de ter uma força.
Responder

18/11/2012

Drayton

Valeu pela tentativa Robson... vou continuar tentando aqui.
Responder

18/11/2012

Alisson Santos

Amigo conseguiu sanar sua duvida??
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar