de todas decidi quedarme con estas
JAVA
Código:
PHPpublic class Steganography { public Steganography() { } public boolean encode(String path, String original, String ext1, String stegan, String message) { String file_name = image_path(path, original, ext1); BufferedImage image_orig = getImage(file_name); BufferedImage image = user_space(image_orig); image = add_text(image, message); return (setImage(image, new File(image_path(path, stegan, "png")), "png")); } public String decode(String path, String name) { byte[] decode; try { //user space is necessary for decrypting BufferedImage image = user_space(getImage(image_path(path, name, "png"))); decode = decode_text(get_byte_data(image)); return (new String(decode)); } catch (Exception e) { JOptionPane.showMessageDialog(null, "There is no hidden message in this image!", "Error", JOptionPane.ERROR_MESSAGE); return ""; } } private String image_path(String path, String name, String ext) { return path + "/" + name + "." + ext; } private BufferedImage getImage(String f) { BufferedImage image = null; File file = new File(f); try { image = ImageIO.read(file); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Image could not be read!", "Error", JOptionPane.ERROR_MESSAGE); } return image; } private boolean setImage(BufferedImage image, File file, String ext) { try { file.delete(); //delete resources used by the File ImageIO.write(image, ext, file); return true; } catch (Exception e) { JOptionPane.showMessageDialog(null, "File could not be saved!", "Error", JOptionPane.ERROR_MESSAGE); return false; } } private BufferedImage add_text(BufferedImage image, String text) { //convert all items to byte arrays: image, message, message length byte img[] = get_byte_data(image); byte msg[] = text.getBytes(); byte len[] = bit_conversion(msg.length); try { encode_text(img, len, 0); //0 first positiong encode_text(img, msg, 32); //4 bytes of space for length: 4bytes*8bit = 32 bits } catch (Exception e) { JOptionPane.showMessageDialog(null, "Target File cannot hold message!", "Error", JOptionPane.ERROR_MESSAGE); } return image; } private BufferedImage user_space(BufferedImage image) { BufferedImage new_img = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR); Graphics2D graphics = new_img.createGraphics(); graphics.drawRenderedImage(image, null); graphics.dispose(); //release all allocated memory for this image return new_img; } private byte[] get_byte_data(BufferedImage image) { WritableRaster raster = image.getRaster(); DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer(); return buffer.getData(); } private byte[] bit_conversion(int i) { //only using 4 bytes byte byte3 = (byte) ((i & 0xFF000000) >>> 24); //0 byte byte2 = (byte) ((i & 0x00FF0000) >>> 16); //0 byte byte1 = (byte) ((i & 0x0000FF00) >>> 8); //0 byte byte0 = (byte) ((i & 0x000000FF)); //{0,0,0,byte0} is equivalent, since all shifts >=8 will be 0 return (new byte[]{byte3, byte2, byte1, byte0}); } private byte[] encode_text(byte[] image, byte[] addition, int offset) { //check that the data + offset will fit in the image if (addition.length + offset > image.length) { throw new IllegalArgumentException("File not long enough!"); } //loop through each addition byte for (int i = 0; i < addition.length; ++i) { //loop through the 8 bits of each byte int add = addition[i]; for (int bit = 7; bit >= 0; --bit, ++offset) //ensure the new offset value carries on through both loops { int b = (add >>> bit) & 1; image[offset] = (byte) ((image[offset] & 0xFE) | b); } } return image; } private byte[] decode_text(byte[] image) { int length = 0; int offset = 32; for (int i = 0; i < 32; ++i) //i=24 will also work, as only the 4th byte contains real data { length = (length << 1) | (image[i] & 1); } byte[] result = new byte[length]; for (int b = 0; b < result.length; ++b) { for (int i = 0; i < 8; ++i, ++offset) { result[b] = (byte) ((result[b] << 1) | (image[offset] & 1)); } } return result; } public static void main(String[] args) { Steganography st = new Steganography(); st.encode("C:\\java\\netbeans\\steganografia\\","kk","png","aaa","la policia esta loca loca"); String salida=st.decode("C:\\java\\netbeans\\steganografia\\", "aaa"); System.out.println(salida); } }
Código PHP:
<?php
function encode(){
$img=imagecreatefromjpeg("kk.jpg");
$message='Hello World'.chr(0);
$x=imagesx($img);
$y=imagesy($img);
$px=0;
$py=23;
$h=23;
for($i=0;$i<strlen($message);$i++) {
$px+=$h;
if($px>$x) {
$px=$px%$x;
$py+=$h;
}
$rgb=imagecolorat($img,$px,$py);
$R=($rgb >> 16) & 0xFF;
$G=($rgb >> 8) & 0xFF;
$B=$rgb & 0xFF;
$m=ord($message{$i});
$R=($R&0xf8)| ($m&0x07);
$G=($B&0xf8)|(($m>>3)&0x07);
$B=($B&0xf8)| (($m>>6)&0x03);
$t=imagecolorallocate($img,$R,$G,$B);
imagesetpixel($img ,$px,$py,$t);
}
imagepng($img,'deadsea2.png');
imagedestroy($img);
}
function decode(){
$img = imagecreatefrompng("deadsea2.png");
$message='';
$x=imagesx($img);
$y=imagesy($img);
$px=0;
$py=23;
$h = 23;
while( TRUE ){
$px += $h;
if( $px > $x ) {
$px = $px%$x;
$py += $h;
}
$rgb = imagecolorat($img, $px, $py);
$R = ($rgb >> 16) & 0x7;
$G = ($rgb >> 8) & 0x7;
$B = $rgb & 0x3;
$m = $R + ($G<<3) + ($B<<6);
$g=dechex($G<<3);
$b=dechex($B<<6);
if( $m==0 ) break;
$message .= chr($m);
}
return $message;
}
encode();
echo decode();
?>
lo que pido no es que me lo hagan.. (para que nadie se enoje..) pero si alguien pudiera guiarme para encontrar el kid de la cuestion .. estaria muy agradecido.