
C语言设计一个简单的加密解密程序如下:
加密程序代码:
#include<stdioh>
main()
{
char
c,filename[20];
FILE
fp1,fp2;
printf("请输入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwentxt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代码:
#include<stdioh>
#include<stringh>
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
fp1,fp2;
printf("请输入待解密文件名:\n");
scanf("%s",filename);
printf("请输入验证码:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwentxt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("验证码错误!请重新输入:\n");
scanf("%s",filename);
}
}
#include <stdlibh>
#include<stdioh>
#define x 4//密钥
/定义加密函数/
int jiami()
{
FILE fp1,fp2; //定义函数指针
char filename[50],ch;
printf("请输入要加密的文件:\n");
scanf("%s",filename) ;
fp1=fopen(filename,"r");
if(fp1==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
} //打开文件失败
// printf("原文件为:\n");
fp2=fopen("jiamihou","w");//新建存放加密后数据的文件jiamihou
if(fp2==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}
while(!feof(fp1)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp1); //正确读出原文件
ch=ch+x;//凯萨加密法
//putchar(ch);//显示加密后的文件
fputc(ch,fp2); //将加密后的字符放入文件jiamihou中
}
printf("加密成功!\n");
fclose(fp1);
fclose(fp2);
}
/定义解密函数/
int jiemi()
{
FILE fp1,fp2;
char filename[50],ch;
char y;
printf("\n");
printf("请输入要解密的文件:\n");
scanf("%s",filename) ; //要解密的文件名
fp1=fopen(filename,"r");
if(fp1==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}//打开文件失败
fp2=fopen("jiemihou","w");//新建存放解密后数据的文件jiemihou
if(fp2==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}
do
{
printf("请输入密码:\n");
scanf("%d",&y) ; //密码
}while(y!=x);
while(!feof(fp1)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp1); //正确读出原文件
ch=ch-y;//凯萨解密法
//putchar(ch);//显示解密后的文件
fputc(ch,fp2); //将解密后的字符放入文件jiemihou中
}
printf("解密成功!\n");
fclose(fp1);
fclose(fp2);
}
/定义打开文件/
int display()
{
FILE fp;
char filename[50],ch;
printf("\n");
printf("请输入要打开显示的文件:\n");
scanf("%s",filename) ; //要显示的文件名
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}//打开文件失败
while(!feof(fp)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp); //正确读出原文件
putchar(ch);//显示解密后的文件
}
printf("\n");
fclose(fp);
}
/主函数/
void main()
{
int n;
do
{
printf(" *** 作方式如下:\n");
printf("1为加密 *** 作\n");
printf("2为解密 *** 作\n");
printf("3为显示 *** 作\n");
printf("0为退出 *** 作\n");
printf("");
printf("\n请选择您的 *** 作:\n");
scanf("%d",&n);
switch(n)
{
case 0:
break;
case 1:
printf("\n您选择了加密 *** 作\n");
jiami();
break;
case 2:
printf("\n您选择了解密 *** 作\n");
jiemi();
break;
case 3:
printf("您选择了显示文件 *** 作\n");
display();
break;
default:
printf("请在0-3之间选择\n");
}
}while(n!=0);
printf("您选择了退出 *** 作\n");
system("pause");//系统暂停,输出“按任意键继续”包含在<stdlibh>中
}
硬件加密锁,俗程“加密狗”,对于加密狗的破解大致可以分为三种方法,一种是通过硬件克隆或者复制,一种是通过SoftICE等Debug工具调试跟踪解密,一种是通过编写拦截程序修改软件和加密狗之间的通讯。
硬件克隆复制主要是针对国产芯片的加密狗,因为国产加密狗公司一般没有核心加密芯片的制造能力,因此有些使用了市场上通用的芯片,破解者分析出芯片电路以及芯片里写的内容后,就可以立刻复制或克隆一个完全相同的加密狗。不过国外的加密狗就无法使用这种方法,国外加密狗硬件使用的是安全性很好的自己研制开发的芯片,通常很难进行复制,而且现在国内加密狗也在使用进口的智能卡芯片,因此这种硬件克隆的解密方法用处越来越少。
对于Debug调试破解,由于软件的复杂度越来越高,编译器产生的代码也越来越多,通过反汇编等方法跟踪调式破解的复杂度已经变得越来越高,破解成本也越来越高,目前已经很少有人愿意花费大量精力进行如此复杂的破解,除非被破解的软件具有极高的价值。
目前加密锁(加密狗)的解密破解工作主要集中在应用程序与加密动态库之间的通讯拦截。这种方法成本较低,也易于实现,对待以单片机等芯片为核心的加密锁(加密狗)具有不错的解密效果。
由于加密锁(加密狗)的应用程序接口(API)基本上都是公开的,因此从网上可以很容易下载到加密狗的编程接口API、用户手册、和其它相关资料,还可以了解加密狗技术的最新进展。
例如,某个国内知名的美国加密狗提供商的一款很有名的加密狗,其全部编程资料就可以从网上获取到,经过对这些资料的分析,我们知道这个加密锁(加密狗)有64个内存单元,其中56个可以被用户使用,这些单元中的每一个都可以被用为三种类型之一:算法、数据值和计数器。
数据值比较好理解,数据值是用户存储在可读写的单元中的数据,就和存储在硬盘里一样,用户可以使用Read函数读出存储单元里面的数据,也可以使用Write函数保存自己的信息到存储单元。
计数器是这样一种单元,软件开发商在其软件中使用Decrement函数可以把其值减一,当计数器和某种活动的(active)算法关联时,计数器为零则会封闭(deactive)这个算法。
算法单元较难理解一些,算法(algorithm)是这样一种技术,你用Query(queryData)函数访问它,其中queryData是查询值,上述函数有一个返回值,被加密的程序知道一组这样的查询值/返回值对,在需要加密的地方,用上述函数检查狗的存在和真伪。对于被指定为算法的单元,软件上是无法读和修改的,即使你是合法的用户也是如此,我理解这种技术除了增加程序复杂性以外,主要是为了对付使用模拟器技术的破解。
此加密锁(加密狗)的所有API函数调用都会有返回值,返回值为0的时候表示成功。
因此,破解思路就出来了,就是使用我们自己的工具(如VB、VC等)重新编写构造一个和加密狗API一样的DLL动态库文件,里面也包含Read、Write等全部API中包含的函数,使用的参量及返回值和原来的函数一样,所有函数返回零。然后对Query、Read函数进行处理,返回应用软件需要的数值即可。
这个新的DLL文件编写成功后,直接替换掉原来的DLL文件,这时候再运行应用软件,软件访问加密狗的 *** 作就全部会被拦截,拦截程序永远会返回正确的数据给软件,从而实现了模拟加密狗的运行。
以上是目前破解软件加密狗(加密锁)的一些常见思路,对于这种破解,软件开发者还是有相应的一些对策的,下一回我将在《软件加密锁编程技巧》一文中具体介绍一下软件开发者将如何编写安全可靠的代码,使得这种类似的破解方法失效。
具体的 *** 作步骤如下:
第一步、首先,打开文件夹加密大师软件后,选择“添加文件夹”,将需要解除密码的文件添加到软件上。
第二步、添加后,选择“解密文件”即可。可以一键将多个文件夹拖到软件上进行批量解除密码哦。
第三步、现在,请输入密码。
第四步、此时,解密工作正在进行,请大家耐心等候。
第四步、解密成功了,可以直接打开文件夹使用了!
以上就是关于C语言设计一个简单的加密解密程序全部的内容,包括:C语言设计一个简单的加密解密程序、写一个对文本文件加密的程序和一个解密程序、一般的软件加密狗怎么破解啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)