实现文件加密功能

wzx65736251

wzx65736251

2016-01-29 12:13

实现文件加密功能,实现文件加密功能

实现文件加密功能
作者:林静

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例源代码

我前几天在VC知识库(VCKBASE.COM)下载了一个 "徐景周" 做的一个叫<加密之星的小工具的源代码,我把它编译后拿文件来实验一下发现它对大多数文件都不管用.比如,加密文本文件只有文件的前一部分被加密而大部分还完整的存在, 如果用来加密mp3,简直就不起作用,加密后的mp3还是能很好的从头播放的尾..所以我自己发明了一种文件加密的方法,虽然很简单,但是能安全地加密任何计算机上的文件而且还可以用同一密码对同一文件进行多次加密。

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

新建一个基于对话框的工程(起名为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下调试通过了)。

展开更多 50%)
分享

猜你喜欢

实现文件加密功能

C语言教程 C语言函数
实现文件加密功能

用DELPHI实现文件加密压缩

编程语言 网络编程
用DELPHI实现文件加密压缩

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi“流”实现文件加密器

编程语言 网络编程
Delphi“流”实现文件加密器

用JavaScript实现文件夹轻松加密

电脑网络
用JavaScript实现文件夹轻松加密

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用VB实现文件查找功能

编程语言 网络编程
用VB实现文件查找功能

用JavaScrpt实现文件夹轻松加密

电脑网络
用JavaScrpt实现文件夹轻松加密

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Servlet及JSP中的多线程同步问题

Servlet及JSP中的多线程同步问题

应用JDOM处理数据库到XML转换的JSP实现

应用JDOM处理数据库到XML转换的JSP实现
下拉加载更多内容 ↓