導航:首頁 > 文檔加密 > c語言中明文暗文加密注意什麼

c語言中明文暗文加密注意什麼

發布時間:2022-07-16 13:02:31

❶ 什麼是明文,什麼是暗文,什麼是非對稱加密,什麼是對稱加密有什麼區別

明文是加密前的文件,暗文是加密後的文件。

與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(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]!='');

yw[j]=mw[j];

printf("原文是%s ",yw);

getchar();}

voidjam()//加密函數

{intj,n;

printf("請輸入原文: ");

gets(mw);

printf("原文是%s ",mw);

j=0;

do//每循環處理一個字元

{

if(mw[j]>='A'&&mw[j]<='Z')

{n=(mw[j]-64+13)%26;//密文大寫字元在字母表中位置

yw[j]=(n==0?'Z':(n+64));}//密文大寫字元

elseif(mw[j]>='a'&&mw[j]<='z')

{n=(mw[j]-96+13)%26;//密文小寫字元在字母表中位置

yw[j]=(n==0?'z':(n+96));}//密文小寫字元

else

yw[j]=mw[j];//忽略非字母

j++;

}while(mw[j]!='');

yw[j]=mw[j];

printf("密文是%s ",yw);

getchar();}

/*說明:

1、菜單調用加密或解密函數

2、加密時,逐個加密mw數組中字母,忽略非字母

3、解密時,逐個解密數組mw中字母,忽略非字母

4、加密演算法是把原字元ascii碼+13,解密演算法是把密字元ascii碼-13,但必須考慮模

運行效果如下圖*/

❹ 關於C語言中加密解密的問題!!!!!!!

fseek(fp,0,SEEK_END); //將位置指針移到文件末尾 SEEK_END是宏定義
//表示文件尾
int len=ftell(fp); // ftell()函數可以得到
//文件當前位置相對於文件首的偏移位元組數 .
//在這也就是得到了文件的長度。
pBuf=new char[len+1]; //分配文件長度+1個字元的空間
rewind(fp); //位置指針回到文件首部
fread(pBuf,1,len,fp); //將文件內容讀入到剛才分配的Buffer中
pBuf[len]=0; //buffer的最後一位置為0 即'\0'
//表示字元串的結束
printf("%s\n",pBuf); //列印出buffer內容 即文件內容
fclose(fp); // 關閉文件指針
printf("請輸入加密/解密的密碼:\n");
scanf("%s",key); //終端輸入加密或解密的密碼
sc(pBuf,key,len,strlen(key)); //進行加密/解密 輸入pBuf 加密/解密後文本仍
//放在pBuf中
printf("請輸入保存加密文件的文件名:\n");
scanf("%s",filename); //終端輸入加密/解密後保存的文件名
if((fp=fopen(filename,"wb"))==NULL) //創建該文件
{printf("無法保存文件,請注意磁碟是否已滿!\n");
exit(0); }
else
fwrite(pBuf,1,len,fp); //將加密/解密後文本寫到文件中
fclose(fp); //關閉文件

void sc(char *fp,char *key,int Flen,int Klen)//是一個加密/解密函數
{int i,j,k;
for(i=0;i<Flen;i+=Klen)
for(j=i,k=0;k<Klen;j++,k++)
fp[j]^=key[k];fp[i]='\0';printf("%s\n",fp);}

❺ C語言的文本文檔怎麼加密

簡單一點的加密可以把文件按字或者位元組取出,然後跟一個事先約定好的數進行異或
這里利用的是異或運算的一個性質:
如果A異或B=C
那麼C異或B=A
就是說異或加密以後要解密的話只要將加密後的文檔按照原來加密的方法再異或一次就解密了
你可以試試

再提供一個簡單加密的方法:按位元組取出以後循環左移/右移,解密的時候相反操作

高級一點的加密就要用到專門的加密演算法了,比如RSA之類。

❻ c語言 數據加密

  1. 什麼是異或演算法

  2. 異或的特點是原始值經過兩次異或某一個數後會變成原來的值,所以有時利用這個特性來進行加密,加密端把數據與一個密鑰進行異或操作,生成密文。接收方收到密文後利用加密方提供的密鑰進行再次異或操作就能得到明文。

常式:

/*以DWORD為單位對文件進行加密,將每個DWORD與0xfcba0000(密鑰)做異或,寫入另一個文件*/

#include<stdio.h>
#include<stdlib.h>
#defineDWORDunsignedlong
#defineBYTEunsignedchar
#definefalse0
#definetrue1
intmain(intargc,char*argv[])
{
FILE*hSource;
FILE*hDestination;

DWORDdwKey=0xfcba0000;
char*pbBuffer;
DWORDdwBufferLen=sizeof(DWORD);
DWORDdwCount;
DWORDdwData;
if(argv[1]==0||argv[2]==0)
{
printf("missingargument! ");
returnfalse;
}
char*szSource=argv[1];
char*szDestination=argv[2];

hSource=fopen(szSource,"rb");//打開源文件.
hDestination=fopen(szDestination,"wb");//打開目標文件
if(hSource==NULL){printf("openSourceFileerror!");returnfalse;}
if(hDestination==NULL){printf("openDestinationFileerror!");returnfalse;}

//分配緩沖區
pbBuffer=(char*)malloc(dwBufferLen);

do{
//從源文件中讀出dwBlockLen個位元組
dwCount=fread(pbBuffer,1,dwBufferLen,hSource);
//加密數據
dwData=*(DWORD*)pbBuffer;//char*TOdword
dwData^=dwKey;//xoroperation
pbBuffer=(char*)&dwData;
//將加密過的數據寫入目標文件
fwrite(pbBuffer,1,dwCount,hDestination);
}while(!feof(hSource));

//關閉文件、釋放內存
fclose(hSource);
fclose(hDestination);

printf("%sisencryptedto%s ",szSource,szDestination);
return0;
}

❼ C語言如何進行字元加密

進行字元加密是很多種的。
數據加密的基本過程就是對原來為明文的文件或數據按某種演算法進行處理,使其成為不可讀的一段代碼為「密文」,使其只能在輸入相應的密鑰之後才能顯示出原容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉化為其原來數據的過程。

❽ C語言怎麼加密字元

#include<stdio.h>
#include<string.h>
intmain()
{
charstr[]="00000",str2[]="00000",*p=str,*p2=str2;
printf("輸入5個字母:");
while(*p!=0)
{
scanf("%c",p);
if(*p==' ')
continue;
if(*p<'A'||(*p>'Z'&&*p<'a')||*p>'z')//輸入驗證,必須是字母
{
printf("只能輸入字母,請重新輸入 ");
p=str;
p2=str2;
fflush(stdin);//輸入有錯重新輸入前清空緩沖區。fflush屬於c擴展函數,正常使用沒問題,如需在linuxggc上使用,考慮多次調用getchar函數來清空
}
else
{
*p2=(*p)+4;
if(*p2>90&&*p2<97)//大寫字母加4,最大位不超出
*p2='A'+(*p2-90)-1;
if(*p2>122)//小寫字母加4,最大位不超出
*p2='a'+(*p2-122)-1;
p2++;
p++;
}
}

printf("原字元串為:%s 加密後的字元串為:%s ",str,str2);
return0;
}

閱讀全文

與c語言中明文暗文加密注意什麼相關的資料

熱點內容
微信位置可以加密嗎 瀏覽:466
演算法蠻力法 瀏覽:436
隨機排練命令 瀏覽:147
python多進程並發 瀏覽:41
安卓軟體安裝如何躲避安全檢測 瀏覽:647
奇幻潮翡翠台源碼百度雲盤 瀏覽:187
什麼軟體可以免費pdf轉word 瀏覽:15
php正則表達式大全 瀏覽:394
androidntp時間 瀏覽:299
輪機長命令簿英文 瀏覽:148
oppo鈴聲設置被加密怎麼處理 瀏覽:548
粵苗app圖形驗證碼怎麼填 瀏覽:899
管家婆架設雲伺服器 瀏覽:254
php的登錄界面代碼 瀏覽:997
php開發客戶端 瀏覽:998
theisle測試服怎麼搜伺服器 瀏覽:447
廣播PDF 瀏覽:218
單片機編程300例匯編百度 瀏覽:35
騰訊雲連接不上伺服器 瀏覽:223
不能用來表示演算法的是 瀏覽:861