正文

文件加密器2007-03-20 10:27:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/24117.html

分享到:

加密器说明

                         点击下载原码

概    序:  常常有一些重要的信息需要记录,这些信息我们 
     不希望别人知道,比如 QQ密码,邮箱密码,银行
     帐号,重要算法的原代码,写给女朋友的情书等等。
     有点安全意识的人都不会将所有的密码设成相同。
     但是这么多的密码常常容易忘记,我就丢失了好
     几个密码。就冲这点我应该为自己写一个,现在
            终于出炉了,呵呵 ……

加密算法:  本程序对文件内容加密,首先由用户输入原始密码
      然后通过 DES 算法(替换+排序) 将该密码转换为
     128(可以更长) 位的 DES 密文,该密文放在加密后的
     文件中,供解密时用,任何人可以看到该密文,但是
     想要通过该密文获取原始密码那是不可能的 !然后
     由原始密码和 DES 密文产生第一个加密因子passKey
     passKey用作随机数种子产生一个数机数 temp 作为
     第二个加密因子。将temp异或passKey后的结果存入
     加密文件中。最后用 temp 和 passKey 加密文件 。
          
暴力破解:  只有暴力才能解密文件(我没想到其它方法)。
     如果密码简单可能会容易被破,因此建议大家密码
     尽量的长。加密原理已经公布,有兴趣大家可以尝试
     去写一个。如果谁的重要资料被加密会遗失了密码
     可以找我,不过写个暴力程序要收取报酬哦,呵呵

使用说明:  加密对象严格限制为文本文件,某些文件不可读
     加密这样的文件程序便会崩溃。另外加密器提供了
     备分程序建议不要关闭。备分器将文件备分在加密
     器所在目录的 backup 子目录下,backup 目录下有
     两个文件 BackFile.ini 记录相应文件所在的原始
     目录,FileTimes.ini 记录该目录下的文件数目,主
     要用于重命名文件,因为文件可能重名。

部分代码:

///////////////////////////////////////////////////////////////////////////////
//
//  文 件: FileMain.c
//  主函数
//
//  作  者: 江南孤峰
//  联  系:QQ: 403324669  
//  时  间: 2007--3--3
//
///////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
#include <io.h>
#include <time.h>
#include <conio.h>
#include "FilePass.h"

// 全局变量
int iBackupProgram = ON;     // 备分器开关
char strBackupDirect[_MAX_PATH] = {""}; // 存储备分目录,即加密器所在目录

// 显示功能菜单
void ShowFunctionMenu(void){
 printf("=========================== 功 能 菜 单 ===========================\n");
 printf("%-36s%-36s\n"," 1: 手动加密单个文件",
         " 2: 手动解密单个文件");
 printf("%-36s%-36s\n"," 3: 自动加密当前目录里的所有文件",
         " 4: 自动解密当前目录里的所有文件");
 printf("%-36s%-36s\n"," 5: 递归加密指定目录下的所有文件",
         " 6: 递归解密指定目录下的所有文件");
 printf("%-36s%-36s\n"," 7: 自动加密我的电脑里的所有文件",
         " 8: 自动解密我的电脑里的所有文件");
 printf("%-36s%-36s\n"," 9: 修改加密器配制",
         "10: 恢复被加密文件至原始位置");
 printf("%-36s\n",     "11: 退出程序");
 printf("====================================================================\n");
 printf("选择你要执行的操作:");
}

// 主函数
int main(void){
 char strFileName[FILE_LENGTH+6] = {""};
 char strAddFileSuffix[FILE_SUFFIX_LENGTH] = {".txt"};
 char strFreeFileSuffix[FILE_SUFFIX_LENGTH] = {".pass"};
 char    strDES[DES_LENGTH + 2] = {""};
 char strPass[PASS_LENGTH + 2] = {""};
 char strPartition[10] = {""};
 int iUserCmd = 0;
 int iContinueFlag = TRUE;
 int iDrivers = 0;
 int count = 0;
 int nFileDealMethod = DELETE_PASS_SOURCE_FILE;
 
 printf("********************************************************************\n");
 printf("\t简 单 文 本 文 件 加 密 器 ( DOS版 )\n");
 printf("\t作   者: 江 南 孤 峰 [ QQ:403324669 ]\n");
 printf("\t时   间: 2007 -- 3 -- 7\n");
 printf("********************************************************************\n");

 _getcwd(strBackupDirect,_MAX_PATH);
 strcat(strBackupDirect,"\\backup");
 CreateBackupDirectAndFile();

 while(iContinueFlag == TRUE){
  ShowMenu(strAddFileSuffix,strFreeFileSuffix,nFileDealMethod);
  scanf("%d",&iUserCmd);
  getchar();
  if(iUserCmd < 9 && iUserCmd > 0){
   if( (iUserCmd % 2) &&
       (GetFilePassDES(strPass,strDES,ADD_PASS) == FAILED) )
    continue;
   else if( !(iUserCmd % 2) &&
     (GetFilePassDES(strPass,strDES,FREE_PASS) == FAILED) )
    continue;
  }
  switch(iUserCmd){
   case 1: // 手动加密文件
    printf("请输入欲加密的文件名:");
    if( GetUserInputFileName(strFileName)==SUCCESS && 
        AddPassForFile(   
     strFileName,   
     strAddFileSuffix, 
     strFreeFileSuffix,
     strPass,  
     strDES   
        ) == SUCCESS
     ){
     printf("文件 %s 加密完成\n",strFileName);
     MyDeleteFile(strFileName,nFileDealMethod,ADD_PASS);
    }
    else
     printf("文件 %s 加密失败\n",strFileName);
    break;
   case 2: // 手动解密文件
    printf("请输入欲解密的文件名:");
    if( GetUserInputFileName(strFileName) == SUCCESS &&
        FreePassForFile(
     strFileName,
     strFreeFileSuffix,
     strPass,
     strDES
        ) == SUCCESS
      ){
     printf("文件 %s 解密完成\n",strFileName);
     MyDeleteFile(strFileName,nFileDealMethod,FREE_PASS);
    }
    else
     printf("文件 %s 解密失败\n",strFileName);
    break;
   case 3: // 自动加密当前目录里的所有文件
    count = AutoAddPassForCurrentDirFile(
     strAddFileSuffix,
     strFreeFileSuffix,
     nFileDealMethod,
     strPass,
     strDES
    );
    printf("\n共加密文件: %d \n",count);
    break;
   case 4: // 自动解密当前目录里的所有文件
    count = AutoFreePassForCurrentDirFile(
     strFreeFileSuffix,
     nFileDealMethod,
     strPass,
     strDES
    );
    printf("\n共解密文件: %d \n",count);
    break;
   case 5:// 递归加密指定目录下的所有文件
    if(ChangeCurrentDirect() == SUCCESS){  
     count = AutoAddPassForUserDefDirFile(
      strAddFileSuffix,
      strFreeFileSuffix,
      nFileDealMethod,
      strPass,
      strDES
     );
     printf("\n共加密文件: %d \n",count);
    }
    break;
   case 6:// 递归解密指定目录下的所有文件
    if(ChangeCurrentDirect() == SUCCESS){   
     count = AutoFreePassForUserDefDirFile(
      strFreeFileSuffix,
      nFileDealMethod,
      strPass,
      strDES
     );
     printf("\n共解密文件: %d \n",count);
    }
    break;
   case 7:// 加密我的电脑里的所有文件
    if(iBackupProgram == OFF){
     puts("备分器处于关闭状态,为了安全,请先打开备分器 !");
     break;
    }
    count = AutoAddPassForAllFile(
      strAddFileSuffix,
      strFreeFileSuffix,
      nFileDealMethod,
      strPass,
      strDES
     );
    printf("\n共加密文件: %d \n",count);
    break;
   case 8: // 解密我的电脑里的所有文件
    count = AutoFreePassForAllFile(
      strFreeFileSuffix,
      nFileDealMethod,
      strPass,
      strDES
     );
    printf("\n共解密文件: %d \n",count);
    break;
   case  9: // 修改加密器的配制
    UpdateProgramStation(
     strAddFileSuffix,
     strFreeFileSuffix,
     &nFileDealMethod
    );
    break;
   case 10: // 从备分目录中恢复被加密文件到原位置
    GetBackFile(strAddFileSuffix,strFreeFileSuffix);
    break;
   case 11: // 结束程序
    iContinueFlag = FALSE;
    break;
   default:
    printf("\n错误:没有该选项 !\n");
    break;
  }
  iUserCmd = -1; // 清除原输入
  system("pause");
 }
 return SUCCESS;
}
  

阅读(3936) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册