?? 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 + -