📄 des.cpp
字号:
#include "des.h"
/**************************************************************
本程序的实现des加解密的功能,每次对64位的密文进行加密,
从而实现对所有的文件的加解密.
author: 李云飞 school:yunnan university
************************************************************/
int write(FILE *fp,char *e)
{
int d,p;
for(p=0;p<8 ;p++)
{
fputc(e[p],fp); //将数据写到文件中
d=-1;
}
return d;
}
void encodefile(FILE *fp1,FILE *fp,int l,int m,char * k)
{
int j,p,n,d,f;
char *e,*c;
c=(char *)malloc(8*sizeof(char));
e=(char *)malloc(8*sizeof(char));
f=(8-m);
fputc((f+'0'),fp);
for(j=0,d=0;j<(l-m);j++,d++)
{
n=fgetc(fp1);
c[d]=n;
if(d==7)
{
e=Dencode(c,k);
d=write(fp,e);
}
}
if(j!=l)
{
for(p=0;p<m;p++)
c[p]=fgetc(fp1);
for(p=m;p<8;p++)
c[p]=' '; c[p]='\0';
e=Dencode(c,k);
write(fp,e);
}
}
void decodefile(FILE *fp1,FILE *fp,int l,char * k)
{
int j,p=0,n,t,d;
char *e,*c;
t=fgetc(fp1)-48;
c=(char *)malloc(8*sizeof(char));
e=(char *)malloc(8*sizeof(char));
for(j=0,d=0;j<l-9 || (t==8 && j<8);j++,d++)
{
n=fgetc(fp1);
c[d]=n;
if(d==7)
{
e=Ddecode(c,k);
d=write(fp,e);
}
}
if(t!=8)
{
for(j=0;j<8;j++)
c[j]=fgetc(fp1);
e=Ddecode(c,k);
for(j=0;j<(8-t);j++)
fputc(e[j],fp);
}
}
//读文件并且进行加密
void file(char * k,char* type,char* filename1,char* filename2)
{
FILE *fp1,*fp;
long int j=0,l,m,i=0;
int h=0;
l=getSizefile(filename1);
m=l%8;
if( (fp1=fopen(filename1,"rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
fp=fopen(filename2,"wb");
if(strcmp(type,"-e")==0)
encodefile(fp1,fp, l, m,k);
if(strcmp(type,"-d")==0)
decodefile(fp1,fp, l,k) ;
fclose(fp1);
fclose(fp);
}
//例:密钥,-e/-k,文件,文件
void main(int argc, char * argv[])
{
printf("%s\n",Ddecode(Dencode("computer","security"),"security"));
file(argv[1],argv[2],argv[3],argv[4]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -