分享
 
 
 

实现文件加密功能

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

实现文件加密功能

作者:林静

下载本文示例源代码

我前几天在VC知识库(VCKBASE.COM)下载了一个 "徐景周" 做的一个叫<加密之星>的小工具的源代码,我把它编译后拿文件来实验一下发现它对大多数文件都不管用.比如,加密文本文件只有文件的前一部分被加密而大部分还完整的存在,

如果用来加密mp3,简直就不起作用,加密后的mp3还是能很好的从头播放的尾..所以我自己发明了一种文件加密的方法,虽然很简单,但是能安全地加密任何计算机上的文件而且还可以用同一密码对同一文件进行多次加密。

我用的方法是把文件从头到尾的每一个字节都读出来然后加密,.

具体做法如下:(请参照源代码);

新建一个基于对话框的工程(起名为ecflie,然后去掉确定、取消、和系统添加的静态控件.在对话框添加三个按钮和两个编辑控件.给两个编辑控件分别关联变量CString

m_path和CString m_pass,其中m_pass作为用户输入的密码,m_path作为文件路径;

其中三个按钮分别为浏览、加密、解密按钮.

添加以下函数:

__int64 epass(); //密码初始化函数

BOOL ecfile(LPCTSTR fpath);//文件加密函数

BOOL dcfile(LPCTSTR fpath);//文件解密函数//给文件加密的函数BOOL CEcfileDlg::ecfile(LPCTSTR fpath)

{

char *data;

CFile *file;

DWORD flen;

m_password = epass();//密码初始化

file = new CFile;

if ( !file-Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))

{

return FALSE;

}

flen = file-GetLength();

data = new char[(int)flen];//为文件分配内存

file-SeekToBegin();

file-Read(data, flen);

//这里把文件的所有字节都进行加密了

for(int i=0; i<(int)flen; i++)

{

data[i] ^= m_password;

data[i] ^= flen; //因为每次加密后文件的大小都会增加5字节,所以如果两次用同一密码进行加密也没关系

}

file-SeekToBegin();

file-Write(data, flen);

delete[] data; //先释放内存

//添加密码验证信息

char cpass[5] = "love";

for(int j=0; j<5; j++)

{

cpass[j] ^= m_password;

}

file-SeekToEnd();

file-Write(&cpass, 5); //在文件尾添加密码严整部分,,这样文件就会增加5字节

file-Close();

delete file;

return TRUE;

}//给文件解密的函数BOOL CEcfileDlg::dcfile(LPCTSTR fpath)

{

char *data;

CFile *file;

DWORD flen;

char love[5];

file = new CFile;

if( !file-Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))

{

return FALSE;

}

flen = file-GetLength();

data = new char[(int)flen];

//检验密码是不是正确

file-Seek(-5, CFile::end);

file-Read(&love, 5);

m_password = epass();

for(int i=0; i<5; i++)

{

love[i] ^= m_password;

}

if(strcmp(love, "love")!=0)

{

return FALSE;

}

//解密

file-SeekToBegin();

file-Read(data, flen);

//按照原来的方法进行解密

for(int j=0; j<(int)flen; j++)

{

data[j] ^= m_password;

data[j] ^= (flen-5);

}

file-SeekToBegin();

file-Write(data, flen);

file-SetLength(flen-5); //删除加密是添加的密码验证部分

file-Close();

delete[] data;

delete file;

return TRUE;

}上面取得密码的函数(m_password = epass();)可以自己定义,我只把密码进行简单的运算:__int64 CEcfileDlg::epass()

{

DWORD plen;

char *ppass;

__int64 mc= 8757735233305;

UpdateData(TRUE);

ppass = m_pass.GetBuffer(0);

plen = strlen(ppass);

for(int i=0; i<(int)plen; i++)

{

mc ^= ppass[i]|128;

}

return mc;

}然后在适当的地方调用这两个函数就可以了.

具体细节请查看源代码,(在WIN XP下调试通过了)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有