软件规模度量

做世界上最好的代码行统计工具

以前做的一些小玩意儿(一)

无聊啊,陆续把以前做的一些小玩意儿共享一下。由于时间比较长了,那时候设计能力有限,现在也没时间维护,如果发现bug就别用了,望体谅。

第一个是叫Secret Bitmap,程序大小88k。下载链接:http://files.cppblog.com/bobquain/SecretBitmap_V1.2.1_CN_Setup.zip
以前在CSDN的下载:http://download.csdn.net/source/182295



Secret Bitmap

在位图中隐藏信息


1. 介绍

首先对在位图中隐藏信息的原理做一下简单的介绍:

    我以24位位图为例(24位位图即用24位来表示一个像素点颜色的位图),因为就目前来讲用24位位图来隐藏信息是最安全的。大家都知道,世界上任何一种颜色都可以用红,绿,蓝以不同比例调和出来,这三种颜色也通常被人们称为三原色。24位色即用8位来表示红色,8位来表示绿色,8位来表示蓝色。8位即一个字节,用十进制表示的话,最小值为0,最大值为255。我们通常知道,(0,0,0)表示黑色,(255,255,255)表示白色,(255,0,0)表示红色等等。24位色最大可表示2的24次方(即16,777,216)种颜色,这已经超出了人类肉眼可以分辨的颜色。举个例子:人类的肉眼几乎无法分辨白色(255,255,255)和(254,254,254)之间的区别,255表示为二进制是11111111,而254表示为二进制为11111110;其他颜色同理,如果只改变其三原色每个字节中的最后一位的话,人类的肉眼几乎无法分辨。这样一来,我们就可以利用每个像素(3个字节)中每个字节的最后一位来存储一些额外的信息,并且不会增加位图文件的大小,这也就是用位图来隐藏信息的原理。当然,我们也可以多占用一些位来加大隐藏数据的信息量,但是这样也就更容易被人类的肉眼所察觉。但是,请大家注意,利用位图隐藏信息仅仅是一种欺骗,并非什么加密技术,如果需要更安全的保护还需要和加密技术搭配使用。

    此款工具在同类工具中的优点是:提供密码加密,数据加密和隐藏位数的选择。在占用位数过多的情况下,比较容易被别人看出位图的瑕疵(如果有原图作为参考会更容易),也就可以怀疑该位图中隐藏了信息。但是,即使这样也没有关系,所有隐藏的数据在隐藏之前已经经过了加密,并且有密码的保护,即使有人分析出了数据,也需要进行解密。所以说它的安全性还是相当高的。

    在人们的隐私越来越难保护的今天,也许你正需要它,也许...将来的某天会需要它。

2. 如何使用

Secret Bitmap的界面比较易懂,参照下图做一下简单介绍:

    1 位图文件:原位图文件。

    2 隐藏文件:需要被隐藏的文件

    3 密码:加密用密码输入(采用MD5加密)。

    4 密码确认:密码确认的输入

    5 隐藏(带面具):隐藏,点击后打开保存文件的对话框,默认保存名称为原位图的名称。文件保存后,保存路径会被记录下来,下次实施隐藏时默认打开上次的保存路径。(数据加密算法...保密)

    6 占用位选择:点击黄色的锁形图案,可打开或关闭占用位。目前可以使用的占用位的数量为1,2或4。

    7 位图文件:隐藏了信息的位图文件

    8 密码:解密用密码输入。

    9 反隐藏(摘掉面具):反隐藏,点击后打开保存文件的对话框,默认保存名称为原隐藏文件的名称。文件保存后,保存路径会被记录下来,下次实施反隐藏时默认打开上次的保存路径。

    10 日志:显示错误和隐藏/反隐藏的结果信息

3. 改进

对比之前发布的V1.1.0版,V1.2.0主要的改进如下:

    1 增加了托拽功能:用户可以从Explorer中托拽文件到[Bitmap File]或[Hidden File]的编辑框中。

    2 去掉了指定输出文件夹的功能,替换为直接打开保存文件对话框,使用户更容易在保存文件时修改文件的名称。

V1.2.1的改进如下:

    1 修正了显示设定为非96DPI的情况下,占用位选择的锁形图案显示位置不正确的Bug。

posted on 2012-03-10 17:59 bobquain 阅读(1765) 评论(2)  编辑 收藏 引用

Feedback

# re: 以前做的一些小玩意儿(一) 2010-09-18 10:05 zuhd

把这个代码贴上来学习一下  回复  更多评论   

# re: 以前做的一些小玩意儿(一) 2010-09-18 11:49 宝宝Kui

@zuhd
这种东西,里面除了隐藏,还涉及到数据的加密,公开源码还有什么安全性可言呢。原理我已经写的很清楚了,界面太土了吧,这个也没有学习的必要。BMP的格式,google一下就好了。不行的话,记得CodeProject还是CodeGuru来着,上面有一个有源代码的。读写位的核心算法如下:
////////////////////////////////////////////////////////////////////
// Read byte
////////////////////////////////////////////////////////////////////
VOID ReadByte(UCHAR *pcHide, UCHAR *sHidBuf, UINT uBits)
{
for (int i = 0; i < 8; i++) {
if (sHidBuf[i/uBits] & (0x01 << i%uBits))
*pcHide |= (0x01 << i);
else
*pcHide &= ~(0x01 << i);
}
}

////////////////////////////////////////////////////////////////////
// Write byte
////////////////////////////////////////////////////////////////////
VOID WriteByte(UCHAR cHide, UCHAR *sHidBuf, UINT uBits)
{
for (int i = 0; i < 8; i++) {
if (cHide & (0x01 << i))
sHidBuf[i/uBits] |= (0x01 << i%uBits);
else
sHidBuf[i/uBits] &= ~(0x01 << i%uBits);
}
}

  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理