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

评论