de todas decidi quedarme con estas
JAVA
Código:
  
PHP
public 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.
 

