📄 des.cpp
字号:
#include "des.h"
#include "G__des.c"
void encrypt()
{
int i=0,ch=0;
FILE *fi,*fo;
char f1[1000],f2[1000];
printf("请输入需要加密的文件名(.txt):\n");
scanf("%s",f1);
while ((fi=fopen(f1,"rb"))==NULL) //打开源文件
{
printf("源文件没有找到!\n");
printf("请重新输入需要加密的文件名(.txt):\n");
scanf("%s",f1);
}
printf("请输入加密后的文件名(.txt):\n");
scanf("%s",f2);
fo=fopen(f2,"w"); //打开加密文件
unsigned char pt[9],ct[9],key[9];
printf("请输入密钥(8位):\n");
scanf("%s",key);
des_key skey;
pt[8]=ct[8]='\0';
des_setup(key,8,0,&skey);
printf("密文的十六进制表示:\n");
while(ch!=EOF)
{
for(i=0;pt[i]!='\0';i++)
{
ch=getc(fi);
if(ch==EOF) for(;i<8;i++) pt[i]='\0'; //判断是否有8位
else pt[i]=ch;
}
des_ecb_encrypt(pt,ct,&skey);
for(i=0;ct[i]!='\0';i++)
{
fprintf(fo,"%.2x",ct[i]);
printf("%.2x",ct[i]);
}
}
printf("\n");
fclose(fi);
fclose(fo);
}
void decrypt()
{
int i=0;
FILE *fp,*fs;
char f3[1000],f4[1000];
printf("请输入加密后的文件名(.txt):\n");
scanf("%s",f3);
while ((fp=fopen(f3,"rb"))==NULL) //打开加密文件
{
printf("源文件没有找到!\n");
printf("请重新输入需要加密的文件名(.txt):\n");
scanf("%s",f3);
}
printf("请输入解密后的文件名(.txt):\n");
scanf("%s",f4);
fs=fopen(f4,"w"); //打开解密文件
unsigned char pt[16],ct[9],st[9],key[9];
printf("请输入密钥(8位):\n");
scanf("%s",key);
des_key skey;
des_setup(key,8,0,&skey);
while(fread(pt,1,16,fp)) //16进制密文的2个字节为1个字符,1次读取16个字节即得到8个密文字符
{
for(i=0;i<16;i++) //将字符形式的16进制转化成10进制存储在整型数组中
{
if(pt[i]<='9')
pt[i]=pt[i]-'0';
else
pt[i]=pt[i]-'a'+10;
}
for(i=0;i<16;i=i+2) //获得8位字符形式的密文
{
ct[i/2]=pt[i]*16+pt[i+1];
}
des_ecb_decrypt(ct,st,&skey);
for(i=0;i<8;i++)
{
fputc(st[i],fs);
}
}
fclose(fp);
fclose(fs);
}
int main(int argc, char* argv[])
{
char a[2];
printf("**********DES文件加密/解密系统**********\n");
printf("1.进行加密\n");
printf("2.进行解密\n");
printf("3.退出\n");
printf("请选择:");
scanf("%s",&a);
while(a[0]!='1'&& a[0]!='2'&& a[0]!='3')
{
printf("选择无效,请重新输入:");
scanf("%s",&a);
}
switch(a[0])
{
case '1':encrypt();
break;
case '2':decrypt();
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -