加密器说明
概 序: 常常有一些重要的信息需要记录,这些信息我们
不希望别人知道,比如 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;
}
评论