056_一种信息隐藏工具
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
3 工具的设计与开发
3.1 设计思路与规划
3.1.1 目的
通过VC++6.0开发一个工具,能够将文本信息通过一套算法加密后,保存到一个图片文件中去,并且该图片仍然能够正常观看,达到信息隐藏的目的。
3.1.2 步骤规划
1. 首先进行需求分析,确定工具的主要功能及主要界面;
2. 进行概要设计,明确工具的框架结构、工作流程,对主要涉及的技术进行预研,明确需要用到的加密算法;
3. 详细设计,并开始编码,实现主要功能模块;
4. 完成相关功能后,对功能进行验证、测试;
5 修正问题,完善功能.
3.2 软件主要功能
1. 能够对输入的字符串数据进行加密,加密数据保存到被选择的图片文件(或其它文件)中,图片文件能够正常观看;
2. 能够将加了密的数据从加密文件中解析出来,数据正确;
3. 能够将加密数据从加密文件中删除,使原来的文件恢复. 【买计算机毕业论文就到计算机毕业论文网】
3.3 流程图及界面
3.3.1 数据加密流程
1. 首先输入待加密的数据;
2. 选择寄主文件,并以可写方式打开文件;
3. 将数据通过加密算法编码;
4. 将编码后的数据写入到打开的文件末尾,保存文件.
图7 数据加密流程图 think58.com [来源:http://www.think58.com]
3.3.2 数据解密流程
1. 首先选择含有加密数据的文件;
2. 以只读的方式打开文件,读取数据并解析,查找加密数据;
3. 如果找到加密数据,进行解密,将数据显示在界面上,关闭加密文件;
4. 如果未找到加密数据,提示用户,选择的文件中没有加密数据.
图8 数据解密流程图
3.3.3 删除加密数据流程
1. 选择含有加密数据的文件;
2. 以读写方式打开文件,读取数据并解析,查找加密数据;
3. 如果找到加密数据,记录加密数据的位置;
4. 将原始文件数据写入到一个新建文件中,并保存;
5. 将加密文件删除,将新保存的文件改回原文件名;
6. 如果未找到加密数据,提示用户,选择的文件中没有加密数据.
图9删除加密数据流程图
3.4 主要功能代码
3.4.1 加解密原理
图10加密原理图
加密信息头、尾:
由两个长度为6的数组构成,取值自定义。
//加密信息头、尾
unsigned char idcode_start[] = {0x01, 0x02, 0x03, 0xfd, 0xfe, 0xff};
unsigned char idcode_end[] = {0xff, 0xfe, 0xfd, 0x03, 0x02, 0x01};
加解密算法:
加密算法采用异或法,将信息的每一个byte依次与自定义的数组计算出来的值进行异或。加解密采用同一个函数,执行两次函数,即可还原信息。
内容来自think58 [资料来源:http://www.THINK58.com]
/**************************************************
* encode_invert
* 将信息加密或解密
**************************************************/
unsigned char* encode_invert(unsigned char* source,int len)
{
unsigned char astrEcode[MAXCIPHERDATA] = {0};
const unsigned char i_UserKey[5] = {0xab, 0xbc, 0xcd, 0xde, 0xef};//异或数组
if(len > 0)
{
for(int i=1;i<=len;i++)
{
astrEcode[i-1] = source[i-1] ^ (i+i_UserKey[i%5]);
}
}
return &astrEcode[0];
} [资料来源:http://THINK58.com]
3.4.2 加密代码实现
this->GetDlgItemText(IDC_DATA,cipher_data);//获取editbox中的加密信息
datalen = cipher_data.GetLength(); think58好,好think58
[资料来源:http://www.THINK58.com]
if(datalen == 0)
{
::MessageBox(NULL,"请在文本框中输入需要加密的信息!","提示信息",MB_OK | MB_ICONINFORMATION);
return;
}
// else if(datalen > MAXCIPHERDATA)
// datalen = MAXCIPHERDATA;//限制最大加密数据长度为MAXCIPHERDATA
if( file.DoModal()==IDOK )
{
CFile file_new;
CString filepathname; 本文来自think58
filepathname = file.GetPathName();
if(file_new.Open(filepathname,CFile::modeWrite))
{
//为防止程序死掉,不支持大于500M的文件
if(file_new.GetLength() > 500*1024*1024)
{
::MessageBox(NULL,"不支持大于500M的文件,请重新选择!","提示信息",MB_OK | MB_ICONINFORMATION);
file_new.Close();
return;
}
think58
//判断文件是否已经存在加密信息,为了共同decipherdlg.cpp中的find_idcode函数,先close文件,再open
//////////////////////////////////////////////
unsigned char* file_codefordecipher = NULL;
int cipherdatalen;
file_new.Close();
extern unsigned char* find_idcode(CString filename,int* cipherdatalen);
file_codefordecipher = find_idcode(filepathname,&cipherdatalen);
if(file_codefordecipher != NULL)
{
::MessageBox(NULL,"此文件已经存在加密信息,请先删除加密信息再重新加密!","提示信息",MB_OK | MB_ICONINFORMATION);
return;
}
file_new.Open(filepathname,CFile::modeWrite);
//////////////////////////////////////////////
[资料来源:http://www.THINK58.com]
cipher_data_encode = encode_invert((unsigned char*)(cipher_data.GetBuffer(datalen)),datalen);
file_new.SeekToEnd();
file_new.Write(idcode_start,sizeof(idcode_start));
file_new.Write(cipher_data_encode,cipher_data.GetLength());
file_new.Write(idcode_end,sizeof(idcode_end)); [资料来源:http://THINK58.com]
file_new.Close();
}
::MessageBox(NULL,"信息加密成功!","提示信息",MB_OK | MB_ICONINFORMATION);
}
} copyright think58 [资料来源:THINK58.com]
think58好,好think58 [来源:http://www.think58.com]
上一篇:vc++医药管理系统+论文
下一篇:vc数据挖掘在客户关系管理中的