String str = "Testando";
String MARCADOR = "####";
str += MARCADOR;
BufferedImage img = ImageIO.read(new File("c:\teste.jpg"));
str.getBytes();
byte[] by = str.getBytes("ISO_8859-1");
int posicaoString = 0;
int b = 1;
int desloc = 0;
JOptionPane.showMessageDialog(null, " "+str);
for (int j = 0, altura = img.getHeight(); j < altura; j++) {
for (int i = 0, largura = img.getWidth(); i < largura; i++) {
if (posicaoString < by.length) {
int rgb = img.getRGB(i, j);
Color c = new Color(rgb);
int blue = c.getBlue(), green = c.getGreen(), red = c.getRed();
byte bitMensagem = (byte) ((by[posicaoString] & b) >> desloc);
byte ultimoBitPixel = (byte) (blue & 0x01);
if (ultimoBitPixel == 1 && bitMensagem == 0) {
blue -= 1;
}
if (ultimoBitPixel == 0 && bitMensagem == 1) {
blue += 1;
}
c = new Color(red, green, blue);
img.setRGB(i, j, c.getRGB());
desloc++;
b = b << 1;
if (b == 256) {
b = 1;
posicaoString++;
desloc = 0;
}
}
}
}
}[/code]
Para retirar a mensagem da foto estou usando outro programa que retira a mensagem da foto, sendo que o programa usa o mesmo método FSB. Acho que deveria passar a imagem por uma Classe BufferedImage mas não sei como.
Tentei retirar a mensagem um algoritmo que achei na web, usa LSB tambem , mas ao retirar a mensagem parece que ele , ao inves de pegar somente a mensagem depois do marcador, ele transforma a imagem toda em bytes e imprimi na tela. Não sei se fiz algo errado ao passar a string para byte ou se é na hora de abrir a imagem.
Poderia tambem adicionar a mensagem no final da imagem, mas como faria isso, encontrar o final da imagem e escrever a mensagem lá ?
Bom, o algoritmo que vc pegou na net funciona? Você já abriu a mensagem num editor hexa para ver se ela foi corretamente codificada?
Uma dica, não tente fazer estenografia sobre formatos compactados de imagem como jpg ou gif. Esses formatos usam compactação lossy, e esse tipo de compactação permite que haja normalização de cores, o que pode eliminar completamente sua mensagem estenografada.
Se for usar algum formato, use bmp ou png, ou qualquer outro com compactação lossless.
A questão do formato jpeg já tinha conhecimento, também tentei com png, fiz testes com os dois varias vezes. No editor hexadecimal ainda não testei vou fazer isso agora.
Esteganografia (do grego “escrita escondida”) é o estudo e uso das técnicas para ocultar a existência de uma mensagem dentro de outra. Em outras palavras, esteganografia é o ramo particular da criptologia que consiste em fazer com que uma forma escrita seja camuflada em outra a fim de mascarar o seu verdadeiro sentido.
É importante frisar a diferença entre criptografia e esteganografia. Enquanto a primeira oculta o significado da mensagem, a segunda oculta a existência da mensagem.
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 final de visualização da imagem.
Tava esperando só uma frasezinha? Aquela logo poderia gardar até uns 70k de texto plano. :D[/quote]
Bom dia,
Muito interessante o tópico Dei uma olhada, na imagem, ela tem 220x54, fiz uma conta aqui e deu 11880 pixels, nessa area. Como saber exatamente, quanto ela pode esteganografar, de um arquivo de texto plano?
Exatamente não dá para saber, pois ele usa compactação. Os 7k do fonte, por exemplo, viraram 1k depois de compactados.
Mas cada pixel da imagem armazena meio byte. Uma imagem de 220x54 tem 11880 pixels, capazes então de armazenar 5940 - 8 bytes, pois os 8 primeiros são usados para guardar o tamanho do arquivo.
Isso dá 5k. Texto plano de código fonte geralmente é extremamente compactável. Primeiro, por usar na maior parte caracteres ascii. Segundo, por ter muita repetição.
Muda sim. Como cada pixel fica ligeiramente diferente do outro, a compactação não irá comprimir tanto quanto comprimiria a imagem se todos fossem iguais.