Nicholas Clark

NAME

Acme::Steganography::Image::Png - hide data (badly) in Png images

SYNOPSIS

  use Acme::Steganography::Image::Png;

  # Write your data out as RGB PNGs hidden in the image "Camouflage.jpg"
  my $writer = Acme::Steganography::Image::Png::RGB::556FS->new();
  $writer->data(\$data);
  my @filenames = $writer->write_images("Camouflage.jpg");
  # Returns a list of the filenames it wrote to

  # Then read them back.
  my $reread =
     Acme::Steganography::Image::Png::RGB::556->read_files(@files);

DESCRIPTION

Acme::Steganography::Image::Png is extremely ineffective at hiding your secrets inside Png images.

There are 4 implementations

Acme::Steganography::Image::Png::FlashingNeonSignGrey

Blatantly stuffs your data into greyscale PNG files with absolutely no attempt to hide it.

Acme::Steganography::Image::Png::RGB::556

Stuffs your data into a sample image, using the low order bits of each colour. 2 bytes of your data are stored in each pixel, 5 bits in Red and Green, 6 in Blue. It produces a rather grainy image.

Acme::Steganography::Image::Png::RGB::323

Also stuffs your data into a sample image, using the low order bits of each colour. Only 1 byte of your data is stored in each pixel, 3 bits in Red and Blue, 2 in Green. To the untrained eye the image looks good. But the fact that it's PNG will make anyone suspicious about the contents.

Acme::Steganography::Image::Png::RGB::556FS

Stuffs your data into a sample image, using the low order bits of each colour. 2 bytes of your data are stored in each pixel, 5 bits in Red and Green, 6 in Blue. Changing the value of pixels to store data is adding error to the image, in this case rather a lot of error. To attempt to conceal some of the graininess Floyd-Steinberg dithering is used to spread the errors around. It's not perfect, but effects are quite interesting, producing a reasonably nice dithered image.

Write your data out by calling write_images

Read your data back in by calling read_files

You don't have to return the filenames in the correct order.

BUGS

Virtually no documentation. There's the source code...

Not very many tests.

Not robust against missing files when re-reading

If you want real steganography, you're in the wrong place.

Doesn't really do enough daft stuff yet to live up to being a proper Acme module. There are plans.

AUTHOR

Nicholas Clark, <nick@ccl4.org>, based on code written by JCHIN after a conversation we had.