随笔:53 文章:0 评论:86 引用:0
浪漫主义
专注力才是王道
首页
发新随笔
发新文章
联系
聚合
管理
初识LSB信息隐藏算法
关于BMP图像的结构网上资料很多,这里不再骜述。
算法是将一个文件以二进制打开,将每一位存放到图片数据区的像素的每个字节的最低位。
以达到信息隐藏的目的。
1
//
---------------------------------------------
2
//
基于LSB的信息隐藏
3
//
---------------------------------------------
4
int
FTDib::LSBCoder(
const
char
*
textFileName)
5
{
6
ifstream textFile;
7
textFile.open(textFileName,ios::
in
|
ios::binary);
8
textFile.seekg(
0
,textFile.end);
9
DWORD textFileLength
=
textFile.tellg();
10
//
判断位图是否够存储隐藏的信息
11
DWORD colorTableSize
=
m_numberOfColors
*
sizeof
(RGB_Element);
12
if
((size
-
colorTableSize)
<
textFileLength
*
8
)
13
{
14
return
-
1
;
//
不够隐藏
15
}
16
17
18
BYTE
*
pTextFile
=
new
BYTE[textFileLength
+
1
];
19
cout
<<
"
隐藏时文件长度:
"
<<
textFileLength
<<
endl;
20
textFile.seekg(
0
,textFile.beg);
21
textFile.read((
char
*
)pTextFile,textFileLength);
22
textFile.close();
23
24
BYTE textData;
25
for
(
int
i
=
0
,k
=
0
; i
<
textFileLength;
++
i)
26
{
27
for
(
int
j
=
0
; j
<
8
;
++
j)
28
{
29
textData
=
pTextFile[i]
>>
j;
30
textData
=
textData
&
0x01
;
31
if
(textData
==
0
)
32
{
33
pDib[k
+
32
]
=
pDib[k
+
32
]
&
0xfe
;
34
}
35
else
36
{
37
pDib[k
+
32
]
=
pDib[k
+
32
]
|
0x01
;
38
}
39
++
k;
40
}
41
}
42
cout
<<
"
信息隐藏完毕
"
<<
endl;
43
//
在前四个字节中写入text文件数据长度
44
DWORD length;
45
for
(
int
i
=
0
; i
<
32
;
++
i)
46
{
47
length
=
textFileLength
>>
i;
48
length
=
length
&
0x00000001
;
49
if
(length
==
0
)
50
{
51
pDib[i]
=
pDib[i]
&
0x1e
;
52
}
53
else
54
{
55
pDib[i]
=
pDib[i]
|
0x01
;
56
}
57
}
58
59
return
0
;
60
61
62
}
63
64
//
---------------------------------------------
65
//
解码基于LSB的信息隐藏
66
//
---------------------------------------------
67
void
FTDib::LSBDecoder(
const
char
*
textFileName)
68
{
69
DWORD length
=
0x00000000
;
70
BYTE bit;
71
//
获取txt文件长度
72
for
(
int
i
=
0
; i
<
32
;
++
i)
73
{
74
bit
=
pDib[i]
&
0x01
;
75
if
(bit
==
0
)
76
{
77
length
=
length
&
0x7fffffff
;
78
}
79
else
80
{
81
length
=
length
|
0x80000000
;
82
}
83
if
(i
<
31
) length
=
length
>>
1
;
84
}
85
86
cout
<<
"
解码时文件长度:
"
<<
length
<<
endl;
87
//
开始解码
88
BYTE
*
pTextFile
=
new
BYTE[length];
89
BYTE textData;
90
for
(
int
i
=
0
,k
=
0
; i
<
length
*
8
;
++
i)
91
{
92
if
(i
&&
i
%
8
==
0
)
{
++
k;}
93
textData
=
pDib[i
+
32
]
&
0x01
;
94
if
(textData
==
0
)
95
{
96
pTextFile[k]
=
pTextFile[k]
&
0x7f
;
97
}
98
else
99
{
100
pTextFile[k]
=
pTextFile[k]
|
0x80
;
101
}
102
if
(i
%
8
!=
7
) pTextFile[k]
=
pTextFile[k]
>>
1
;
103
}
104
105
cout
<<
"
解码完毕
"
<<
endl;
106
107
ofstream textFile;
108
textFile.open(textFileName,ios::
out
|
ios::binary);
109
textFile.write((
char
*
)pTextFile,length);
110
textFile.close();
111
delete pTextFile;
112
}
113
BMP结构及源码:
FTDib.zip
发表于 2008-03-15 13:29
foxtail
阅读(5621)
评论(0)
编辑
收藏
引用
所属分类:
基础算法
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
初识LSB信息隐藏算法
【Knuth】算法的形式化定义
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
CALENDER
<
2007年11月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
公告
常用链接
我的随笔
我的评论
我参与的随笔
随笔分类
(54)
C/C++程序设计(8)
(rss)
Linux学习笔记(3)
(rss)
UI设计与编程
(rss)
Windows程序设计(13)
(rss)
词法分析器(6)
(rss)
汇编学习(9)
(rss)
基础算法(2)
(rss)
练习题(5)
(rss)
生活与牢骚(7)
(rss)
数学知识(1)
(rss)
随笔档案
(53)
2013年5月 (1)
2009年6月 (1)
2009年1月 (1)
2008年11月 (2)
2008年10月 (2)
2008年9月 (1)
2008年8月 (4)
2008年7月 (5)
2008年6月 (2)
2008年5月 (1)
2008年4月 (6)
2008年3月 (1)
2008年1月 (5)
2007年11月 (2)
2007年10月 (5)
2007年9月 (10)
2007年8月 (4)
文章分类
软件架构与设计模式
(rss)
相册
Friend
illustrate
C++名库
boost
loki-lib
sgi-stl
Friend
Jedimaster
kevinlynx
Negroove
陈梓瀚
陆玺玲
彭小虎
我的MSN博客
杨晖(腾讯)
GUI和设计方法
QT官方
QT中文
viksoe
WTL参考
Mathematics
GoodMath
Math
Problem
NOCOW
PKU
SGU
STL网站
STL
stlchina
STL扩展
工具
English
MSDN
TechNet
精品网站
codeguru
codeproject
GameDev
好多经典的文章值得好好研究的一个网站
Google Papers
ogre3d
regular expression
sourceforge
xkcd
非常C++
麻省理工学院开放课程
网络协议分析
其他
EditControl
PieceTable的改进
美食天下
语言
最新随笔
1. 安装WPS
2. 如何修改mysql root密码
3. 关于文字输出的函数TabbedTextOut[整理]
4. 俄罗斯方块V1.2
5. 俄罗斯方块V1.0
6. 文件MD5计算工具
7. ClipBoard.ASM文件分析
8. STL学习摘要之序列式容器
9. [zt]C运行库概念
10. 如何自己写Win32控件
11. 俄罗斯方块
12. 推荐一个文本编辑器
13. [Z]Visual C++开发工具与调试技巧整理
14. Scintilla 主要类和控件的消息
15. C++中的强制类型转换[转]
16. typedef用法小结
17. 如何使用Scintilla编辑控件
18. 近期学习计划
19. C++之父表达式计算例子
20. 【疑惑】小波变换的一点瑕疵
21. 【转】构造可配置词法分析器【正文六&七】
22. 【转】构造可配置词法分析器【正文五】
23. 【转】构造可配置词法分析器【正文四】
24. 【转】构造可配置词法分析器【正文三】
25. 【转】构造可配置词法分析器【正文二】
26. 【转】构造可配置词法分析器【正文一】陈梓瀚同学著
27. 初识LSB信息隐藏算法
28. windows程序设计(滚动条)
29. windows编程(输出文字)
30. windows编程(窗口与消息)
31. windows程序设计(开始)
32. 关于内存模式[节选]
33. 关系闭包运算
最新评论
1. re: 俄罗斯方块
评论内容较长,点击标题查看
--ss
2. re: #pragma once与 #ifndef的区别
不错!
--sss
3. re: #pragma once与 #ifndef的区别
写得很详细啊,学习了!
--爱的华尔兹
4. re: 俄罗斯方块V1.0
评论内容较长,点击标题查看
--肖俊
5. re: #pragma once与 #ifndef的区别
一起使用就都OK啦~~
--xavier
6. re: typedef用法小结
最后看不太明白,不过还是很感谢你的总结!
--张
7. re: typedef用法小结
想都不想的拷贝党
明显你是想说define的
--f
8. re: #pragma once与 #ifndef的区别[未登录]
好
--C++
9. re: #pragma once与 #ifndef的区别
写的非常好,顶~
--liuliu
10. re: #pragma once与 #ifndef的区别
我觉得可以两者一起使用。。。
--伪哥
11. re: #pragma once与 #ifndef的区别
不错,感谢楼主
--天之骄子'
12. re: #pragma once与 #ifndef的区别
谢谢
--rufi
13. re: typedef用法小结
第一种VC就通不过,后面不想看了。
--水中鱼
14. re: #pragma once与 #ifndef的区别
love you baby!
--romantic
15. re: windows程序设计(滚动条)
图示不可理解...
--dancingfish
16. re: GCC编译选项和GDB的使用
评论内容较长,点击标题查看
--resume company
17. re: GCC编译选项和GDB的使用
评论内容较长,点击标题查看
--custom thesis
18. re: GCC编译选项和GDB的使用
评论内容较长,点击标题查看
--buy essay
19. re: GCC编译选项和GDB的使用
评论内容较长,点击标题查看
--ClementsLeticia23
20. re: 学习如何编程---摘自《如何成为一名黑客》
黑客怎么做 我不会啊
谁叫我啊
我盗别人的号
那个人告诉我啊
--高飞
21. re: typedef用法小结[未登录]
很乱
--Jacky
22. re: #pragma once与 #ifndef的区别
不错!
有个问题:“方式一由语言支持所以移植性好,方式二 可以避免名字冲突”
progma也是C99标准之内,应该不存在移植性不好的问题吧
--cgdeveloper
23. re: typedef用法小结
恕我2b了,第二种是什么用法?
--溪流
24. re: typedef用法小结
@JIAHONGXU
VC也编译不通过。。楼主胡说
--sniffer
25. re: 【疑惑】小波变换的一点瑕疵
想请教一下楼主这是怎么弄的啊,能否有楼主的联系方式啊?我的QQ94432715
--diamond20
26. re: 学习如何编程---摘自《如何成为一名黑客》
@王华
非常感谢
--亚办法
27. re: 学习如何编程---摘自《如何成为一名黑客》
继续讨论
--继续讨论
28. re: typedef用法小结
貌似 #define pInt int*
--JIAHONGXU
29. re: typedef用法小结
2. typedef pInt (int *)---有该种用法么?LINUX GCC上编译不通过
--JIAHONGXU
30. re: #pragma once与 #ifndef的区别
学习
--i
31. re: 学习如何编程---摘自《如何成为一名黑客》
评论内容较长,点击标题查看
--古典风格大
32. re: 学习如何编程---摘自《如何成为一名黑客》
教我编程做软件
--吕欣
33. re: [Z]Visual C++开发工具与调试技巧整理
好!
--lwking
Powered By:
博客园
模板提供
:
沪江博客