Gravar Caracteres em Imagens

14 respostas
renanpto

Boa Noite Galera,
Alguem sabe o nome do processo para gravar texto ocultos em imagens ?
Ex codigo de barras.

valeu

14 Respostas

ViniGodoy

O código de barras não é texto oculto em imagem. É uma fonte, cada barra tem um tamanho específico, que representa uma letra ou um número.

O processo de esconder informação em mensagens, imagens ou outro tipo de informação de fachada chama-se esteganografia.

E

Ou esteganografia.

Processo que não esconde o significado da mensagem, mas a própria mensagem…

Eu fiz um software Java que faz isso…

Foxlol

eclipso:
Ou esteganografia.

Processo que não esconde o significado da mensagem, mas a própria mensagem…

Eu fiz um software Java que faz isso…

Po se tu já fez então ajuda o kra ai, dá as diretivas :roll:

ViniGodoy

Na verdade, não é tão difícil.

  1. Cada pixel da imagem é formado, geralmente, por 3 ou 4 componentes de cor. R, G, B e A. Altere o último bit desse componente de cor para representar parte da informação;
  2. Portanto, cada pixel da imagem RGBA te dará 4 bits. Com 2 pixels, vc tem 8 bits, o suficiente para armazenar qualquer código ascii. Uma imagem de 800x600 tem 480.000 pixels, o suficiente para guardar 240.000 caracteres!
  3. No caso de imagens com 3 componentes de cor (RGB), cada pixel vai te dar exatamente 3 bits. Então, ao invés da tabela ascii, de 8 bits, crie sua própria tabela com 6 bits. São 64 caracteres, o suficiente para incluir letras maísculas, números e alguns símbolos.

Para alterar uma imagem no Java, use o objeto Raster:
http://javaboutique.internet.com/tutorials/rasters/
http://javaboutique.internet.com/tutorials/rasters2/

ViniGodoy

Ah. Quase me esqueço. Ao salvar a imagem no disco, você deve usar um formato sem compactação lossy (como GIF ou JPEG), já que esse tipo de compatação admite perda da informação.

Ao invés disso, use o próprio bmp (sem compactação) ou uma compactação lossless, como PNG ou TIFF.

renanpto

Ola pessoal, obrigado pela força.
Vou precisar implementar um programa que faço isso. e creio que vou precisar das dicas de vcs.
Valeu
Renan

renanpto

E ai galera,
Alguem sabe uma forma de encontrar o bit menos significativo de um numero, sem ter que transforma-lo numa sequencia de bits em uma String e pegar ultimo caracter da direita (isso é gambia?) ?..

Obrigado.

E

Eu fiz exatamente isso que o Vini indicou…

Alterando somente o último bit de cada componente, se você tem uma imagem RGB de N X M pixels ela consegue esconder no máximo (NM3) bits de informação. Ou seja, (NM3)/8 códigos caracteres ASCII. Meu software, além disso, ofrecia a possibilidade de inserir informação também no penúltimo bit da componente, mas isso já dava uma diferença perceptível…

E

o desafio é fazer isso com outros tipos de arquivo agora…Vídeo e som, por exemplo :wink:

Num filme dá pra esconder a bíblia, eu acho…

T

renanpto:
E ai galera,
Alguem sabe uma forma de encontrar o bit menos significativo de um numero, sem ter que transforma-lo numa sequencia de bits em uma String e pegar ultimo caracter da direita (isso é gambia?) ?..

Obrigado.

Se o número for par, o bit menos significativo é zero. Se for ímpar, o bit menos significativo é um.

Simples, não?

De modo geral:

public int getBitMenosSignificativo (int x) {
    return (x & 0x01) != 0 ? 1 : 0; // a expressão "(x & 0x01) != 0) é uma forma de checar se x é ímpar.
}
public int setaBitMenosSignificativo (int x) {
    return x | 0x01;
}
public int limpaBitMenosSignificativo (int x) {
    return x & ~0x01;
}
renanpto

thingol:
renanpto:
E ai galera,
Alguem sabe uma forma de encontrar o bit menos significativo de um numero, sem ter que transforma-lo numa sequencia de bits em uma String e pegar ultimo caracter da direita (isso é gambia?) ?..

Obrigado.

Se o número for par, o bit menos significativo é zero. Se for ímpar, o bit menos significativo é um.

Simples, não?

De modo geral:

public int getBitMenosSignificativo (int x) { return (x & 0x01) != 0 ? 1 : 0; // a expressão "(x & 0x01) != 0) é uma forma de checar se x é ímpar. } public int setaBitMenosSignificativo (int x) { return x | 0x01; } public int limpaBitMenosSignificativo (int x) { return x & ~0x01; }

HAHahahHAHhahaha…

Putz concentrado em resolver problemas mais complexos… nao vi o mais simples e logico …

:lol:

Valeu thingol…

renanpto

eclipso:
o desafio é fazer isso com outros tipos de arquivo agora…Vídeo e som, por exemplo :wink:

Num filme dá pra esconder a bíblia, eu acho…

Cara ontem andei pesquisando sobre esse assunto com imagens…
Achei super interessante… show mesmo…
Encontrei um blog q o cara dizia que o pessoal do Osama Bin Laden, usava essa técnica* com imagens para se comunicar aos aliados… nao sei se é real…
Mas é pirado. :shock:

T

Existem técnicas que permitem usar esteganografia em imagens em formatos “lossy” (como JPEG).
Mas não sei exatamente como é que elas funcionam.
O bom de você usar essas técnicas é que imagens PNG são bastante suspeitas, mas JPEG, justamente porque podem sofrer alterações devido à compressão, não tão são suspeitas assim.
Acho que é necessário codificar um monte de informação redundante e correção de erros para que, mesmo efetuando descompressão e recompressão da imagem (que pode ocorrer, por exemplo, quando você usa um “acelerador de downloads” como os que existem naqueles provedores discados como o UOL ou o POP), a tal informação subliminar não se perca.

renanpto

Ola,
Estou implementando um software com JME para fazer o reconhecimento de imagens.
Para emular a camera do celular, crio um video que possui a imagem (video de formato *.mpg - WTK viewFinder.MPG).

Até aqui tudo bem, o problema é que o no video gerado, algumas sequencias de pixels são alteradas (lembrando que neste ponto ja tirei a foto).

Exemplificando:
Uma imagem onde a largura padrao dos blocos é igual a 5 pixels de largura.
Vou utilizar “P” para pixel Preto e “B” para Branco para explicar o problema. O “-” separa o bloco de 5 pixels.

Sequencia Pixels Original:  BBBBB-PPPPP-BBBBB-PPPPP-[b]PPPPP[/b]-BBBBB

Sequencia Pixels Gerada: BBBBB-PPPPP-BBBBB-PPPPP-[b]PPPPPPP[/b]-BBBBB

Fiquei com algumas questões:

Será que essa alteração pode ser consequencia da conversão da imagem para o video ?
Com o dispositivo real tambem pode acontecer isso ? (So testando pra saber)
Se alguem tiver alguma ideia ou dica posta ai.

Espero que tenha sido claro.

obs: estou usando o Wireless Toolkit 2.5, e o formato da imagem é .bmp. O software para criacao de videos é VideoJoiner

Obrigado.

Renan

Criado 1 de junho de 2008
Ultima resposta 27 de jun. de 2008
Respostas 14
Participantes 5