❶ 什麼是明文,什麼是暗文,什麼是非對稱加密,什麼是對稱加密有什麼區別
明文是加密前的文件,暗文是加密後的文件。
與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
非對稱加密演算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密後的信息進行解密。甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。
非對稱加密演算法的保密性比較好,它消除了最終用戶交換密鑰的需要,但加密和解密花費時間長、速度慢,它不適合於對文件加密而只適用於對少量數據進行加密。
❷ c語言中的文件加密
首先打開VC++6.0
選擇文件,新建
選擇C++ source file 新建一個空白文檔
聲明頭文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
首先寫個加密函數,演算法就是簡介里說的
void EncryptFile(FILE *sfp,FILE *dfp,char pwd)
{
char ch;
if(sfp==0||dfp==0)
{
printf("ERROR!\n");
return;
}
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=(ch-'a'+1)%26+'a';
ch=ch^pwd;
}
if((ch>='A')&&(ch<='Z'))
{
ch=(ch-'A'+1)%26+'A';
ch=ch^pwd;
}
fputc(ch,dfp);
}
}
寫解密子函數:與加密的過程相反
void DecryptFile(FILE *sfp,FILE *dfp,char pwd)
{
char ch;
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd;
ch=(ch-'a'+25)%26+'a';
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd;
ch=(ch-'A'+25)%26+'A';
}
fputc(ch,dfp);
}
}
輸出函數,輸出文件內容
void OutputFile(FILE *fp)
{
char ch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函數,主要調用這幾個函數
int main()
{
/*用戶輸入的要加密的文件名*/
char sfilename[20];
/*用戶輸入加密後保存的文件名*/
char dfilename[20];
/*用來保存密碼字元*/
char pwd;
FILE *sfp,*dfp;
printf("\nPlease input filename to be encrypted:\n");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密後你要的文件名*/
printf("input filename to save the encrypted file:\n");
gets(dfilename);
/*得到加密字元*/
printf("Please input your Password:\n");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*來表示輸入的加密字元*/
printf("*\n");
/*以只讀方式打開要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can't open the file :%s\n",sfilename);
exit(0);
}
/*輸出要加密的文件*/
printf("\nThe the text of file to be encrypted is:\n");
OutputFile(sfp);
/*建立加密後的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can't open or create the file :%s\n",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf("\n\nEncrypted the file successfully!\n");
/*輸出加密後的文件*/
printf("\nAfter encrypting the text of file is:\n");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return 0;
}
❸ 明文密文問題(C語言編程)
#include<stdio.h>
#include<stdlib.h>
voidjam();//聲明加密函數
voidjem();//聲明解密函數
charmw[80],yw[80];//存放原文或密文的數組
voidmain()
{charF;
do{
system("CLS");
printf("請選擇: ");
printf("1、加密 ");
printf("2、解密 ");
printf("0、退出 ");
scanf("%c",&F);
getchar();
switch(F)
{case'1':
jam();
case'2':
jem();}
}while(F!='0');
}
voidjem()//解密函數
{intj,n;
printf("請輸入密文: ");
gets(mw);
printf("密文是%s ",mw);
j=0;
do//每循環處理一個字元
{
if(mw[j]>='A'&&mw[j]<='Z')
{n=mw[j]-64-13;//原文大寫字元在字母表中位置
yw[j]=n<=0?'Z'+n:n%26+64;}//原文大寫字元
elseif(mw[j]>='a'&&mw[j]<='z')
{n=mw[j]-96-13;//原文小寫字元在字母表中位置
yw[j]=n<=0?'z'+n:n%26+96;}//原文小寫字元
else
yw[j]=mw[j];//忽略非字母
j++;
}while(mw[j]!='