信息安全之隐写图片

  

隐写图片

我们用记事本打开或者用notepad++打开一张jpg图片,然后在最后写下一段文字,然后发送给别人,别人也用记事本拉到最后 打开才能看到。

这是因为在jpg中,是有结束符的,16进制是FF D9,利用UE编辑器 可以看到正常的jpg结尾都是FF D9的,图片查看器会忽视jpg结束符之后的内容,所以我们附加的内容,自然也就不会影响到图像的正常显示。

我们找一张图片(这表情就是原图)在里面写入“这里是密文”,然后保存

最后我们写一个程序来给出图片地址检查出添加的密文

 1 package gh;
 2
 3 import java.io.BufferedInputStream;
 4 import java.io.ByteArrayOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileWriter;
 8 import java.io.IOException;
 9 import java.io.PrintWriter;
10 /**
11  * 检查隐写图片
12  * @author ganhang
13  *
14  */
15
16 public class Steganographic {
17
18     public static void main(String[] args) throws Exception {
19         try {
20             StringBuffer sb = new StringBuffer();
21             FileInputStream fis = new FileInputStream("1.jpg");
22             BufferedInputStream bis = new BufferedInputStream(fis);
23             ByteArrayOutputStream bos = new ByteArrayOutputStream();
24             byte[] buff = new byte[102400];
25             int len = 0;
26             while ((len = fis.read(buff)) != -1) {
27                 bos.write(buff, 0, len);
28             }
29             // 得到图片的字节数组
30             byte[] result = bos.toByteArray();
31             //System.out.println("++++" + byte2HexStr(result));
32             // 字节数组转成十六进制
33             String str = byte2HexStr(result);
34             /*
35              * 找出FFD9的位置
36              */
37             char []c=str.toCharArray();
38             int j=0;
39             for(int i=0;i<c.length;i++){
40                 if(c[i]==‘F‘&&c[i+1]==‘F‘&&c[i+2]==‘D‘&&c[i+3]==‘9‘){
41                     j=i+4;
42                     break;
43                 }
44             }
45             //截取FFD9后面的十六进制,然后转中文
46             str=str.substring(j);
47             System.out.println(hexToStringGBK(str));
48         } catch (IOException e) {
49             e.printStackTrace();
50         }
51     }
52
53     /*
54      * 实现字节数组向十六进制的转换方法一
55      */
56     public static String byte2HexStr(byte[] b) {
57         String hs = "";
58         String stmp = "";
59         for (int n = 0; n < b.length; n++) {
60             stmp = (Integer.toHexString(b[n] & 0XFF));
61             if (stmp.length() == 1)
62                 hs = hs + "0" + stmp;
63             else
64                 hs = hs + stmp;
65         }
66         return hs.toUpperCase();
67     }
68
69     public static String hexToStringGBK(String s) {
70         byte[] baKeyword = new byte[s.length() / 2];
71         for (int i = 0; i < baKeyword.length; i++) {
72             try {
73                 baKeyword[i] = (byte) (0xff & Integer.parseInt(
74                         s.substring(i * 2, i * 2 + 2), 16));
75             } catch (Exception e) {
76                 e.printStackTrace();
77                 return "";
78             }
79         }
80         try {
81             s = new String(baKeyword, "GBK");// UTF-16le:Not
82         } catch (Exception e1) {
83             e1.printStackTrace();
84             return "";
85         }
86         return s;
87     }
88 }

测试运行

时间: 2024-12-28 13:24:05

信息安全之隐写图片的相关文章

android——隐写软件

趁热打铁 完成对话框选择文件之后 在其基础上写了个在图片上实现LSB隐写功能的软件 不多说 上代码下载链接 http://download.csdn.net/detail/u012409883/7840495  主界面图如下: 隐写活动界面 选择隐写图片目录对话框 提取信息活动界面

ctf中关于图片的隐写随笔(不全)

①JPG图片的结束符,十六进制常为FFD9 ②binwalk的原理是:检查常见的文件头信息,如果不符合,一定有隐藏信息.③JPG是有损压缩,PNG是无损压缩,BMP是不压缩. 隐写的基本原理:图片查看器会忽视掉结束符之后的内容,所以追加在结束符后面的内容会被隐藏起来.

CTF杂项之图片隐写、crypto

图片隐写: 1.将图片里的数据转换成二维码: 用linux下的信息提取工具Binwalk看一下: [email protected]:~/Desktop# binwalk 图片名 DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 1000 x 562, 8-bit/color RGBA,

四道图片隐写题

第一题 打开压缩包得到的是一张PNG格式的图片 首先拖放到010Editor中: CTRL+F 搜索IHDR发现只有一个,没有其他问题 然后放到KALI中分析一波: 图片能够在kali中打开,说明不是宽高的隐写,因为如果修改了宽高在linux中是无法正常显示的 然后binwalk分析一波: 同样的没有什么问题 最后就是放到 stegslove里面试一试了 简单的科普一下png的知识 png支持RGBA四个通道,每个通道占8个二进制位,隐写文件或数据一般都在各个通道的低位,因为低位的变化不会引起较

隐写技巧——利用JPEG文件格式隐藏payload

0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利用的细节存在差异. 本文相关工具: 16进制编辑器:Hex Editor 隐写检测:Stegdetect 下载地址: https://github.com/abeluck/stegdetect 编辑Exit信息:MagicEXIF 下载地址: http://www.magicexif.com/ 分析

F5隐写工具使用

  0x00 前言 今天在实验吧看到一个图片隐写的题目,用了stegslove和winHex分析一通发现并没有什么有效信息.看了评论区大佬的提示说用到了F5隐写工具,所以百度教程用了一下,发现确实解决了问题. 解题链接:http://www.shiyanbar.com/ctf/1938 0x01 F5下载安装 F5隐写全称F5-steganography,在kail系统命令端输入以下代码: git clone https://github.com/matthewgao/F5-steganogra

记一道CTF隐写题解答过程

  0x00 前言 由于我是这几天才开始接触隐写这种东西,所以作为新手我想记录一下刚刚所学.这道CTF所需的知识点包括了图片的内容隐藏,mp3隐写,base64解密,当铺解密,可能用到的工具包括binwalk,MP3Stego等. 题目链接:http://ctf5.shiyanbar.com/stega/apple.png 0x01 试探 这几天我养成了一个习惯,拿到题目不管三七二十一先到kail上面跑一跑.一来可以多用用里面丰富的工具,二来可以拓展解题思路. 首先.命令行输入wget http

Bugku 杂项 隐写

隐写 下载后打开压缩包发现是一张图片 用winhex打开 图中红色框内是PNG的PE头 在IHDR后面的八个字节(黄色框部分)为该图片的长度.宽度信息 将黄色框内最后一个字节由A4改为F4后另存为图片,出现flag 原文地址:https://www.cnblogs.com/agenthtb/p/10450147.html

基于python的LSB隐写与分析

隐写 效果 隐写前 隐写后 灰度值直方图差别 部分源码 def dec_to_bin(dec): return '{:08b}'.format(dec) def bin_to_dec(binary_code): dec = 0 for i in range(len(binary_code) - 1): dec = dec + int(binary_code[i]) * int(pow(2, 7 - i)) return dec # 文件信息转二进制流 def read_data_file(pat