合天安全实验室CTF之解密200

来源:互联网 发布:seo每天一贴 编辑:程序博客网 时间:2024/04/28 12:18

下载文件后,发现是两张一样的图片(至少我肉眼看不出来)


得益于刚刚做过那个颜色RGB的题目,马上就决定用计算机来进行比对(JAVA代码写得不好真是惭愧-_-!),代码如下:

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;public class PicTest2 {public static void main(String[] args) throws IOException {int i,j;int rgb1[] = new int[3];int rgb2[] = new int[3];File file1 = new File("G:\\1.png");// 实例化file对象,并设置读取图片路径File file2 = new File("G:\\2.png");File file3 = new File("G:\\3.png");BufferedImage bi1 = null; // 像素缓冲区开始为空BufferedImage bi2 = null;BufferedImage bi3 = null;bi1 = ImageIO.read(file1);bi2 = ImageIO.read(file2);bi3 = ImageIO.read(file3);int width = bi1.getWidth();int height = bi1.getHeight();for (i = 0; i < width; i++) {for (j = 0; j < height; j++) {int pixel1 = bi1.getRGB(i, j);rgb1[0] = (pixel1 & 0xff0000) >> 16;rgb1[1] = (pixel1 & 0xff00) >> 8;rgb1[2] = (pixel1 & 0xff);int pixel2 = bi2.getRGB(i, j);rgb2[0] = (pixel2 & 0xff0000) >> 16;rgb2[1] = (pixel2 & 0xff00) >> 8;rgb2[2] = (pixel2 & 0xff);bi3.setRGB(i, j, Integer.parseInt(Integer.toHexString(rgb1[0]^rgb2[0])+Integer.toHexString(rgb1[1]^rgb2[1])+Integer.toHexString(rgb1[2]^rgb2[2]),16));}}ImageIO.write(bi3, "PNG", file3); //写入文件}}
好了,运行一下,出来了一张3.png


仔细看,中间有个二维码,不过手机扫不出来,看来还要处理一下,加几行代码

for (i = 0; i < width; i++) {for (j = 0; j < height; j++) {//System.out.println(bi3.getRGB(i, j));if(bi3.getRGB(i, j)==-16777216) bi3.setRGB(i, j, -1);}}ImageIO.write(bi3, "PNG", file3); //写入文件
OK,图片出来了


用手机扫描一下,出来了flag{#justdiffit}

提交,通过!

1 0
原创粉丝点击