期末要做的题目,利用真彩色BMP图片携带保密信息,有人能给点提示吗?

xjw163 2008-12-14 10:54:14
题目是这样的

题目:利用真彩色BMP图片携带保密信息
功能:在不破坏图片视觉效果的前提下,在图片中插入保密信息。
基本要求:
1.程序类型为控制台应用程序。
2.设计简单的菜单,能够进行系统功能选择。
3.不破坏原图片的视觉效果。
4.嵌入保密信息到图片中。
5.从图片中读取保密信息。
功能扩充:
1.自行扩充。
提示:
真彩色BMP图片是一种位图,如实的记载了图片中的每一个点的颜色信息,每一个点的颜色由红(R)、绿(G)、蓝(B)三色混合合成。真彩色模式下每个颜色分量的取值范围是0到255,值越大,此分量的颜色越深,值越小,此分量的颜色越浅。由于人眼对颜色的深浅程度不是很敏感,因此可以把颜色分量的最低位用来保存保密信息中的一个二进制位。

我在百度上搜不到相关的资料,没有一点头绪,有人能给点提示吗?

我的思路是这样的
假设要加密的文件的二进制信息是:
101011010010111010001100 共24个数据要加密

BMP图的数据的结构是这样的
第一个像素 红(00000001)绿(00000010)蓝(00000011)
第二个像素 红(00000001)绿(00000010)蓝(00000011)
第三个像素 红(00000100)绿(00000101)蓝(00000110)
第四个像素 红(00000111)绿(00001000)蓝(00001001)
第五个像素 红(00001010)绿(00001011)蓝(00001100)
第六个像素 红(00001101)绿(00001110)蓝(00001111)
第七个像素 红(00010000)绿(00010001)蓝(00010010)
第八个像素 红(00010011)绿(00010100)蓝(00010101)


这8个像素有24个(24Byte)(192bit)数据单元构成

根据题目中"人眼对颜色的深浅程度不是很敏感",因此可以把这24个数据的最后一位,与要加密的数据对比,如果相同,则进行下一位;如果不同,则更改对应像素数据单元中的最后一个数据位为相反的值.
因此,更改后的图片的数据是这样的


第一个像素 红(00000001)绿(00000010)蓝(00000011)
第二个像素 红(00000000)绿(00000011)蓝(00000011)
第三个像素 红(00000100)绿(00000101)蓝(00000110)
第四个像素 红(00000110)绿(00001001)蓝(00001000)
第五个像素 红(00001011)绿(00001011)蓝(00001101)
第六个像素 红(00001100)绿(00001111)蓝(00001110)
第七个像素 红(00010000)绿(00010000)蓝(00010011)
第八个像素 红(00010011)绿(00010100)蓝(00010100)


解密时,以二进制方式打开BMP图片,读取第8,16,24,32....192位的数据,将其写入到新创建的一个文件中,就完成了数据的解密.

上面是大致的思路,但是,我对各种语句,关键字的用法几乎都不了解,所以没法写出程序

伪代码:

open file as binary(要加密的文件.txt)
获取文件长度函数(要加密的文件.txt)
得到长度为filelong=8
定义一个长度为fiellong的数组
for(i=1;i小于=filelong;i++)
{
数组[i]=读取要加密的文件二进制数据();

}
以二进制打开要处理的BMP图片文件;
判断图片文件的长度是否小于filelong*8
如果小于,则显示bmp文件容量不够,请更换...等内容,退出或执行其它步骤
如果大于则继续;
复制要处理的BMP图片文件到临时文件夹(防止原图被覆盖)
for(j=8;j小于fiellong*8;j=j+8)
{
databmp=读取BMP文件数据(j);
if(databmp不等于数组(j/8))
{
要写入的数据=数组(j/8);
写入文件函数(参数为:文件名,文件数据的位数,要写入的数据);
}
}
更改文件名为"已加密.bmp"
将复制到临时文件夹的BMP复制回原处

大家看看思路对吗?代码我是一点都不会,只有一点一点的搞了
...全文
205 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2008-12-15
  • 打赏
  • 举报
回复
数据隐写,实际上就是利用空域算法分离高低字节

自己找一下把
关键字为:数字水印,空域算法,小波算法,盲域算法,快速傅里叶变换
xjw163 2008-12-15
  • 打赏
  • 举报
回复
顶上去啊,不能沉了
hangang7403 2008-12-15
  • 打赏
  • 举报
回复
up
xu_2007 2008-12-15
  • 打赏
  • 举报
回复
把保密信息加进BMP图片中已经是很早以前就有的方法了!
周公 2008-12-15
  • 打赏
  • 举报
回复
C#中的位操作
位操作符是对数据按二进制位进行运算的操作符。位操作是其他很多语言都支持的操作,如C、C 和Java等,C#也不例外支持位操作。注意位操作支持的数据类型是基本数据类型,如byte、short、char、int、long等,C#支持的位操作有如下几种:按位与 & · 按位或 | · 按位取反 ~ · 左移 >· 异或^并附以简短代码说明效果。
周公 2008-12-15
  • 打赏
  • 举报
回复
N年前看过类似的文章,做过一些尝试,其实就是把图片数据所对应的字节数组中的每个字节的低3位(bit,一个byte是8个bit),提取信息的时候提取低三位的信息,还原成byte[],再从byte[]还原成你最终的形式,比如string或者其它image。

主要用到了位操作。
烈火蜓蜻 2008-12-15
  • 打赏
  • 举报
回复
其实, 这已经清楚了,
xxyping 2008-12-15
  • 打赏
  • 举报
回复
记得以前毕业设计是做的BMP图像的加密,现在全忘了,就知道是用种子,然后随机数二进制与或什么的。
BMP图像里好像有一个片段是空的,可以加进很多二进制的,具体你还是到网上找找吧
liuxiuming 2008-12-15
  • 打赏
  • 举报
回复
好像不需要这么 做吧,我记得以前有个软件就可以把一个文本文件和一个图片文件合在一起,要是你这么做的话,是不是有点太繁琐了?
gtiroy 2008-12-15
  • 打赏
  • 举报
回复
合成,将图像,和个人信息合成。

个人信息放在图像的后面,就只会显示图像了。
mark620 2008-12-15
  • 打赏
  • 举报
回复
顶.
slimfeng 2008-12-15
  • 打赏
  • 举报
回复
需要好好确认一下bmp文件的结构
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。处理的时候只需对图形数据进行修改。
zgke 2008-12-15
  • 打赏
  • 举报
回复
用32色的BMP 可以使用ALPHA的值。
xjw163 2008-12-15
  • 打赏
  • 举报
回复
又沉了,有知道的说说啊
yulien 2008-12-15
  • 打赏
  • 举报
回复
ding
xjw163 2008-12-15
  • 打赏
  • 举报
回复
郁闷死,一夜之间沉到底了!大哥们有会的给点提示啊!
xjw163 2008-12-15
  • 打赏
  • 举报
回复
顶上去,CSDN人气太高,帖子更新老快了
GTX280 2008-12-14
  • 打赏
  • 举报
回复
牛,帮顶

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧