一个简单的自解密文件加密软件的制作

来源 :硅谷 | 被引量 : 0次 | 上传用户:liuliumin3
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要 网上的文件加密程序很多,像最著名的winrar,winzip等。它们的实现算法相当复杂。同时还有一些简单的加密程序,有的操作虽然简单,却需要配套解密程序;或者是操作繁琐。
  关键词 解密;加密;算法;Huffman;自解密;线程
  中图分类号:TP309.7 文献标识码:A 文章编号:1671-7597(2015)03-0112-02
  1 问题提出
  网上的文件加密程序很多,像最著名的winrar,winzip,它们的算法相当复杂。还有一些简单的加密程序,操作虽然简单,却需要配套解密程序;或者是操作繁琐。本人用过许多,效果都不太好。于是本人决定自己开发一个简单的自解密文件加密软件。
  2 创作思路
  本人觉得Huffman编码是最简单的一种算法,采用它实现自解密的加密文件软件的算法。双击运行程序,输入密码,选择一个文件,会自动生成自解密程序。以后任意运行自解密程序,输入前面加密时输入的密码,则解密出原始文件。
  整个软件只有一个程序“可执行文件加密器.exe”,它的自定义资源为一个可执行文件解密器.exe的文件内容。其它3个是VC2013动态链接库。
  程序先读入打开文件对话框中选择的文件内容,输入密码,根据文件中的256个字符(0-255)出现的次数,作为各个字符的权值,构造Huffman树和各个字符的Huffman编码。将每个字符换成它对应的Huffman编码,并转换成字节(1个或2个),将加密文件内容先存入输出缓冲区中。
  然后依次写入可执行文件解密器.exe(由自定义资源中读取)、无路径的打开文件名、输入的密码(已经由公用SHA1算法加密)、Huffman结构、Huffman加密文件内容、标志,最后是文件名长度+文件名偏移+密码长度+密码偏移+Huffman结构长度+Huffman结构偏移+Huffman加密文件内容长度+Huffman加密文件内容偏移。其中最后这8个整数都是加密的,Huffman加密文件内容也是加密的。
  程序通过线程调用来实现大数据量的文件写入,通过不停的等待全局变量g_Finished的值为真,来结束程序运行,弹出成功生成加密文件对话框。
  自定义资源(可执行程序解密程序.exe)首先弹出输入密码对话框,输入一个密码。然后读取它自身文件内容,通过标志定位到最后100个字节,找到文件名长度+文件名偏移+密码长度+密码偏移+Huffman结构长度+Huffman结构偏移+Huffman加密文件内容长度+Huffman加密文件内容偏移,实现这8个整数的解密。从自身读出文件名和密码,并和输入密码比较,不同,弹出错误对话框,结束运行。否则读出并填充Huffman结构(Huffman树)。读出加密文件内容到缓冲区,对缓冲区中的字节做解密操作。对缓冲区的加密文件内容中的每一个字节,从Huffman树的根节点开始,根据当前读取字节是’0’还是’1’,相应选择左子树或右子树。如果当前字节找到的左子树指针和右子树指针之和为0,说明找到了叶子节点,读出该字符的原始代码(0-255),累计存入另一个缓冲区中。最后写入“文件名”文件,解密操作成功完成。
  3 关键代码
  3.1 Huffman加密文件
  count = 0;
  for (i = 0; i < filesize; i++)
  {
  uc= (unsigned char)Buffer[i];
  length=strlen(hfNode[uc].code);
  memset(code,0,sizeof(char)*16);
  if(length==8)
  strcpy_s(code,hfNode[uc].code);
  else if(length<8)
  {
  for(j=0;j  code[j]=hfNode[uc].code[j];
  for(j=length;j<8;j++)code[j]=‘0’;
  }
  else
  {
  for(j=0;j  code[j]=hfNode[uc].code[j];
  for(j=length;j<16;j++)code[j]=‘0’;
  }
  b=b2=0;
  for(j=0;j<8;j++)
  b|=(code[j]- ‘0’)<<(7-j);
  buffer[count++] = b;
  if(length > 8)
  {
  for (j = 8; j < 16; j++)
  b2 |= (code[j] - ‘0’) << (15 - j);
  buffer[count++] = b2;
  }
  }
  …
  Count = count;
  }
  3.2 写入结构
  OF.open(filename2, ios::out | ios::binary);
  …
  pBuffer=LockResource(hGlobal);
  exeBuffer = new char[length];
  memcpy(exeBuffer, pBuffer, length);
  …
  OF.write(exeBuffer, length);   文件名偏移=OF.tellp(),文件名长度=strlen(shortFileName);
  OF.write(shortFileName, 文件名长度); .
  //写入密码同上
  Huffman结构偏移 = OF.tellp(), Huffman结构长度 = sizeof(hfNode[0])*M;
  for (i = 0; i < M; i++)
  OF.write((char*)&hfNode[i], sizeof(hfNode[i]));
  Huffman加密文件内容偏移 = OF.tellp(), Huffman加密文件内容长度 = count;
  for(i=0;i  {
  …
  for(j=0;j<4;j++)
  {
  uc=buffer[i];
  uc ^= encbyte[j];
  }
  buffer[i]=uc;
  }
  OF.write(buffer, Huffman加密文件内容长度);
  …
  OF.write(flag, strlen(flag));
  文件名长度 -= 173, 文件名偏移 -= 227,…;
  OF << 文件名长度 << “ “ << 文件名偏移 << “ “…;
  OF.close();
  …
  g_Finished = true;
  }
  4 小结
  现在很多程序不是算法深奥难懂;就是操作复杂,令人眼花缭乱。其实一个完整清晰、操作简单、功能强大的程序更加适合用户使用。
  参考文献
  [1]算法分析与设计[M].人民邮电出版社.
  [2]数据结构[M].清华大学出版社.
  [3]现代计算机常用数据结构和算法[M].机械工业出
  版社.
  作者简介
  童小明(1974-),男,汉族,江西新余人,新余市第十中学高级教师,江西省技术能手,1996年7月毕业于上海铁道大学,计算机应用专业本科学历,精于软件编程、硬件维修、网络维护和网站建设。
  袁芳(1982-),女,汉族,江西新余人,新余市第十中学二级教师,大学学历,江西科技师范学院毕业。
其他文献
针对油气长输管道线路竣工数据,结合实际项目,介绍了如何利用几何学的知识,通过图形化的方式快速甄别庞大且繁杂的竣工数据的合理性、有效性。 According to the completion
目的探讨优质护理服务的方法与效果。方法首先转变护理观念,改变护理工作模式,在优质护理实践过程中加强对病人的交流与沟通,了解和给予他们需要的关怀和帮助,强化健康指导,帮助提
随着现代农业发展和农民生活水平不断提高,一方面农作物秸秆丢弃、焚烧污染环境,秸秆综合利用成为农业生产面临的重要课题;另一方面一家一户养殖的减少,户用沼气池的畜禽粪便
质量问题一直是水利工程建设最重要的核心问题,特别是基层水利的建设,更要严格遵循施工流程,严格把关,把质量放在施工的首要位置。但由于各种因素,在面临实际操作中,对于水利工程建
目的探讨护理干预对癫痫患者治疗依从性的影响.方法将56例接受治疗的癫痫患者随机分为实验组和对照组各28例.两组采用同样治疗方法,实验组给予治疗依从性护理干预措施,分别对两
摘 要 在电力系统中变压器占据着至关重要的地位,在整个系统运行过程中,变压器一旦出现了问题,就会严重影响其正常运行。变压器是电力系统中最为关键的设备之一,它的主要功能是承担电压转换、电压分配和传输以及提供电力服务。本文就电力变压器运行过程中存在的故障以及相应的解决对策做了简要的分析和探讨。  关键词 电力变压器;故障分析;解决对策  中图分类号:TM41 文献标识码:A 文章编号:1671-759
讨论了渠道防渗关键技术—复合土工膜技术在南水北调工程中的应用,介绍了复合土工膜施工工艺、施工过程和施工方法,以及施工中注意的问题。
摘 要 如今,在人们的生活中,电视和广播已经成为非常重要的组成部分,它对于人们生活水平的提升,有着十分大的帮助;在新的形势下,需要深入研究无线电设备的发射技术和接收技术,实践研究表明,将高功率微波发射技术应用到无线电广播中,具有较大的优势,人们应该给予充分的重视。本文简要分析了无线电广播中高功率微波发射技术的应用,希望可以提供一些有价值的参考意见。  关键词 无线电广播;高功率;微波发射  中图分
在我国陕南地区,由于地区山高坡陡,主要为土石山区,有非常丰富的石料资源。在建设农田时,主要以石坎梯田为主,在提高作物产量、保持水土、环境保护方面发挥了重要作用。但是由于石
摘 要 金属材料加工与人们的生活和社会的发展息息相关,其中最难的环节是金属材料热处理。当前我国金属材料热处理问题较多,在节能方面尚需加强。本文主要探讨了金属材料热处理节能新技术的具体应用,并针对其应用进行了分析。  关键词 金属材料;热处理;节能;新技术  中图分类号:TG15 文献标识码:A 文章编号:1671-7597(2015)03-0111-01  金属材料与人们的生活和社会的发展息息相关