import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
//import java.util.Arrays;
import java.util.Scanner;
import javax.imageio.ImageIO;
public class LSB_encode {
static final String MESSAGEFILE
= "C:\\message.txt"; static final String COVERIMAGEFILE
= "C:\\cover.jpeg"; static final String STEGIMAGEFILE
= "C:\\steg.png";
String contentOfMessageFile
= (readMessageFile
()); int[] bits=bit_Msg(contentOfMessageFile);
System.
out.
println("msg in file "+contentOfMessageFile
); for(int i=0;i<bits.length;i++)
hideTheMessage(bits, theImage);
}
String contentOfMessageFile
= ""; Scanner scan = new Scanner (a);
while (scan.hasNextLine()){
String next
= scan.
nextLine(); contentOfMessageFile += next;
if (scan.hasNextLine()){
contentOfMessageFile += "\n";
}
}
scan.close();
return contentOfMessageFile;
}
public static int[] bit_Msg
(String msg
){ int j=0;
int[] b_msg=new int[msg.length()*8];
for(int i=0;i<msg.length();i++){
int x=msg.charAt(i);
while(x_s.length()!=8){
x_s='0'+x_s;
}
System.
out.
println("dec value for "+x
+" is "+x_s
);
for(int i1=0;i1<8;i1++) {
j++;
};
}
return b_msg;
}
try{
theImage = ImageIO.read(p);
e.printStackTrace();
}
return theImage;
}
int bit_l=bits.length/8;
int[] bl_msg=new int[8];
System.
out.
println("bit lent "+bit_l
); while(bl_s.length()!=8){
bl_s='0'+bl_s;
}
for(int i1=0;i1<8;i1++) {
};
int j=0;
int b=0;
int currentBitEntry=8;
for (int x = 0; x < theImage.getWidth(); x++){
for ( int y = 0; y < theImage.getHeight(); y++){
if(x==0&&y<8){
int currentPixel = theImage.getRGB(x, y);
int ori=currentPixel;
int red = currentPixel>>16;
red = red & 255;
int green = currentPixel>>8;
green = green & 255;
int blue = currentPixel;
blue = blue & 255;
String sten_s
=x_s.
substring(0, x_s.
length()-1); sten_s
=sten_s
+Integer.
toString(bl_msg
[b
]);
//j++;
int temp
=Integer.
parseInt(sten_s,
2); int s_pixel
=Integer.
parseInt(sten_s,
2); int a=255;
int rgb = (a<<24) | (red<<16) | (green<<8) | s_pixel;
theImage.setRGB(x, y, rgb);
//System.out.println("original "+ori+" after "+theImage.getRGB(x, y));
ImageIO.write(theImage, "png", f);
b++;
}
else if (currentBitEntry < bits.length+8 ){
int currentPixel = theImage.getRGB(x, y);
int ori=currentPixel;
int red = currentPixel>>16;
red = red & 255;
int green = currentPixel>>8;
green = green & 255;
int blue = currentPixel;
blue = blue & 255;
String sten_s
=x_s.
substring(0, x_s.
length()-1); sten_s
=sten_s
+Integer.
toString(bits
[j
]); j++;
int temp
=Integer.
parseInt(sten_s,
2); int s_pixel
=Integer.
parseInt(sten_s,
2);
int a=255;
int rgb = (a<<24) | (red<<16) | (green<<8) | s_pixel;
theImage.setRGB(x, y, rgb);
//System.out.println("original "+ori+" after "+theImage.getRGB(x, y));
ImageIO.write(theImage, "png", f);
currentBitEntry++;
//System.out.println("curre "+currentBitEntry);
}
}
}
}
}
aW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7CmltcG9ydCBqYXZhLmlvLkZpbGU7CmltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci8vaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKCmltcG9ydCBqYXZheC5pbWFnZWlvLkltYWdlSU87CnB1YmxpYyBjbGFzcyBMU0JfZW5jb2RlIHsKCXN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRUZJTEUgPSAiQzpcXG1lc3NhZ2UudHh0IjsKCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09WRVJJTUFHRUZJTEUgPSAiQzpcXGNvdmVyLmpwZWciOwkKCXN0YXRpYyBmaW5hbCBTdHJpbmcgU1RFR0lNQUdFRklMRSA9ICJDOlxcc3RlZy5wbmciOwoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJCgkJU3RyaW5nIGNvbnRlbnRPZk1lc3NhZ2VGaWxlID0gKHJlYWRNZXNzYWdlRmlsZSgpKTsKaW50W10gYml0cz1iaXRfTXNnKGNvbnRlbnRPZk1lc3NhZ2VGaWxlKTsKU3lzdGVtLm91dC5wcmludGxuKCJtc2cgaW4gZmlsZSAiK2NvbnRlbnRPZk1lc3NhZ2VGaWxlKTsKZm9yKGludCBpPTA7aTxiaXRzLmxlbmd0aDtpKyspClN5c3RlbS5vdXQucHJpbnQoYml0c1tpXSk7ClN5c3RlbS5vdXQucHJpbnRsbigpOwpCdWZmZXJlZEltYWdlIHRoZUltYWdlPXJlYWRJbWFnZUZpbGUoQ09WRVJJTUFHRUZJTEUpOwpoaWRlVGhlTWVzc2FnZShiaXRzLCB0aGVJbWFnZSk7Cgp9CgkKcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZE1lc3NhZ2VGaWxlICgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb257CglTdHJpbmcgY29udGVudE9mTWVzc2FnZUZpbGUgPSAiIjsKCUZpbGUgYSA9IG5ldyBGaWxlIChNRVNTQUdFRklMRSk7CglTY2FubmVyIHNjYW4gPSBuZXcgU2Nhbm5lciAoYSk7Cgl3aGlsZSAoc2Nhbi5oYXNOZXh0TGluZSgpKXsKCVN0cmluZyBuZXh0ID0gc2Nhbi5uZXh0TGluZSgpOwoJY29udGVudE9mTWVzc2FnZUZpbGUgKz0gbmV4dDsKCWlmIChzY2FuLmhhc05leHRMaW5lKCkpewoJY29udGVudE9mTWVzc2FnZUZpbGUgKz0gIlxuIjsKCX0KCX0KCXNjYW4uY2xvc2UoKTsKCXJldHVybiBjb250ZW50T2ZNZXNzYWdlRmlsZTsKCX0KcHVibGljIHN0YXRpYyBpbnRbXSBiaXRfTXNnKFN0cmluZyBtc2cpewoJaW50IGo9MDsKCWludFtdIGJfbXNnPW5ldyBpbnRbbXNnLmxlbmd0aCgpKjhdOwoJZm9yKGludCBpPTA7aTxtc2cubGVuZ3RoKCk7aSsrKXsKCQlpbnQgeD1tc2cuY2hhckF0KGkpOwoJCVN0cmluZyB4X3M9SW50ZWdlci50b0JpbmFyeVN0cmluZyh4KTsKCQl3aGlsZSh4X3MubGVuZ3RoKCkhPTgpewoJCQl4X3M9JzAnK3hfczsKCQl9CgkJU3lzdGVtLm91dC5wcmludGxuKCJkZWMgdmFsdWUgZm9yICIreCArIiBpcyAiK3hfcyk7CgoJCWZvcihpbnQgaTE9MDtpMTw4O2kxKyspIHsKCQkgICAgYl9tc2dbal0gPSBJbnRlZ2VyLnBhcnNlSW50KFN0cmluZy52YWx1ZU9mKHhfcy5jaGFyQXQoaTEpKSk7CgkJICAgIGorKzsKCQkgIH07Cgl9CgkKCXJldHVybiBiX21zZzsKfQpwdWJsaWMgc3RhdGljIEJ1ZmZlcmVkSW1hZ2UgcmVhZEltYWdlRmlsZShTdHJpbmcgQ09WRVJJTUFHRUZJTEUpewpCdWZmZXJlZEltYWdlIHRoZUltYWdlID0gbnVsbDsKRmlsZSBwID0gbmV3IEZpbGUgKENPVkVSSU1BR0VGSUxFKTsKdHJ5ewp0aGVJbWFnZSA9IEltYWdlSU8ucmVhZChwKTsKfWNhdGNoIChJT0V4Y2VwdGlvbiBlKXsKZS5wcmludFN0YWNrVHJhY2UoKTsKU3lzdGVtLmV4aXQoMSk7Cn0KcmV0dXJuIHRoZUltYWdlOwp9CgoKcHVibGljIHN0YXRpYyB2b2lkIGhpZGVUaGVNZXNzYWdlIChpbnRbXSBiaXRzLCBCdWZmZXJlZEltYWdlIHRoZUltYWdlKSB0aHJvd3MgRXhjZXB0aW9uewoJRmlsZSBmID0gbmV3IEZpbGUgKFNURUdJTUFHRUZJTEUpOwoJQnVmZmVyZWRJbWFnZSBzdGVuX2ltZz1udWxsOwoJaW50IGJpdF9sPWJpdHMubGVuZ3RoLzg7CglpbnRbXSBibF9tc2c9bmV3IGludFs4XTsKCVN5c3RlbS5vdXQucHJpbnRsbigiYml0IGxlbnQgIitiaXRfbCk7CglTdHJpbmcgYmxfcz1JbnRlZ2VyLnRvQmluYXJ5U3RyaW5nKGJpdF9sKTsKCXdoaWxlKGJsX3MubGVuZ3RoKCkhPTgpewoJCWJsX3M9JzAnK2JsX3M7Cgl9Cglmb3IoaW50IGkxPTA7aTE8ODtpMSsrKSB7CgkJYmxfbXNnW2kxXSA9IEludGVnZXIucGFyc2VJbnQoU3RyaW5nLnZhbHVlT2YoYmxfcy5jaGFyQXQoaTEpKSk7CgkgIH07CmludCBqPTA7CmludCBiPTA7CmludCBjdXJyZW50Qml0RW50cnk9ODsKCmZvciAoaW50IHggPSAwOyB4IDwgdGhlSW1hZ2UuZ2V0V2lkdGgoKTsgeCsrKXsKZm9yICggaW50IHkgPSAwOyB5IDwgdGhlSW1hZ2UuZ2V0SGVpZ2h0KCk7IHkrKyl7CglpZih4PT0wJiZ5PDgpewoJCWludCBjdXJyZW50UGl4ZWwgPSB0aGVJbWFnZS5nZXRSR0IoeCwgeSk7CQoJCWludCBvcmk9Y3VycmVudFBpeGVsOwoJCWludCByZWQgPSBjdXJyZW50UGl4ZWw+PjE2OwoJCXJlZCA9IHJlZCAmIDI1NTsKCQlpbnQgZ3JlZW4gPSBjdXJyZW50UGl4ZWw+Pjg7CgkJZ3JlZW4gPSBncmVlbiAmIDI1NTsKCQlpbnQgYmx1ZSA9IGN1cnJlbnRQaXhlbDsKCQlibHVlID0gYmx1ZSAmIDI1NTsKCQlTdHJpbmcgeF9zPUludGVnZXIudG9CaW5hcnlTdHJpbmcoYmx1ZSk7CgkJU3RyaW5nIHN0ZW5fcz14X3Muc3Vic3RyaW5nKDAsIHhfcy5sZW5ndGgoKS0xKTsKCQlzdGVuX3M9c3Rlbl9zK0ludGVnZXIudG9TdHJpbmcoYmxfbXNnW2JdKTsKCgkJLy9qKys7CgkJaW50IHRlbXA9SW50ZWdlci5wYXJzZUludChzdGVuX3MsMik7CgkJaW50IHNfcGl4ZWw9SW50ZWdlci5wYXJzZUludChzdGVuX3MsIDIpOwoJCWludCBhPTI1NTsKCQlpbnQgcmdiID0gKGE8PDI0KSB8IChyZWQ8PDE2KSB8IChncmVlbjw8OCkgfCBzX3BpeGVsOwoJCXRoZUltYWdlLnNldFJHQih4LCB5LCByZ2IpOwoJCS8vU3lzdGVtLm91dC5wcmludGxuKCJvcmlnaW5hbCAiK29yaSsiIGFmdGVyICIrdGhlSW1hZ2UuZ2V0UkdCKHgsIHkpKTsKCQlJbWFnZUlPLndyaXRlKHRoZUltYWdlLCAicG5nIiwgZik7CmIrKzsKCgl9CgllbHNlIGlmIChjdXJyZW50Qml0RW50cnkgPCBiaXRzLmxlbmd0aCs4ICl7CgoJaW50IGN1cnJlbnRQaXhlbCA9IHRoZUltYWdlLmdldFJHQih4LCB5KTsJCglpbnQgb3JpPWN1cnJlbnRQaXhlbDsKCWludCByZWQgPSBjdXJyZW50UGl4ZWw+PjE2OwoJcmVkID0gcmVkICYgMjU1OwoJaW50IGdyZWVuID0gY3VycmVudFBpeGVsPj44OwoJZ3JlZW4gPSBncmVlbiAmIDI1NTsKCWludCBibHVlID0gY3VycmVudFBpeGVsOwoJYmx1ZSA9IGJsdWUgJiAyNTU7CglTdHJpbmcgeF9zPUludGVnZXIudG9CaW5hcnlTdHJpbmcoYmx1ZSk7CglTdHJpbmcgc3Rlbl9zPXhfcy5zdWJzdHJpbmcoMCwgeF9zLmxlbmd0aCgpLTEpOwoJc3Rlbl9zPXN0ZW5fcytJbnRlZ2VyLnRvU3RyaW5nKGJpdHNbal0pOwoJaisrOwoJaW50IHRlbXA9SW50ZWdlci5wYXJzZUludChzdGVuX3MsMik7CglpbnQgc19waXhlbD1JbnRlZ2VyLnBhcnNlSW50KHN0ZW5fcywgMik7CgkKCWludCBhPTI1NTsKCWludCByZ2IgPSAoYTw8MjQpIHwgKHJlZDw8MTYpIHwgKGdyZWVuPDw4KSB8IHNfcGl4ZWw7Cgl0aGVJbWFnZS5zZXRSR0IoeCwgeSwgcmdiKTsKCS8vU3lzdGVtLm91dC5wcmludGxuKCJvcmlnaW5hbCAiK29yaSsiIGFmdGVyICIrdGhlSW1hZ2UuZ2V0UkdCKHgsIHkpKTsKCUltYWdlSU8ud3JpdGUodGhlSW1hZ2UsICJwbmciLCBmKTsKCgljdXJyZW50Qml0RW50cnkrKzsJCgkvL1N5c3RlbS5vdXQucHJpbnRsbigiY3VycmUgIitjdXJyZW50Qml0RW50cnkpOwoJfQp9Cn0KfQp9Cg==