A. C語言 異或加密
C語言異或加密實現的原理為,將任意值,與相同值兩次異或後,結果與原值相同。所以可以通過將源數據與一個固定的值(秘鑰key)異或後,得到密文,然後將密文再次與秘鑰異或,得到原文。這樣就實現了異或加密及解密。
C語言中的異或是一種按位操作的計算,其計算原理為,操作數對應位上的值相同,則結果位上值為0,否則為1.異或的運算符號為^,於是真值表如下:
0^0=0
0^1=1
1^0=1
1^1=0
這樣區分源數據和秘鑰值,有如下四種可能:
0^0=0
0^0=0
0^1=1
1^1=0
1^0=1
1^0=1
1^1=0
0^1=1
以上是將一個值,用另一個值連續異或兩次後的計算過程,可以看到,最終的值與原始值是相同的。這就是異或加密的基礎原理。
B. C語言編譯加密問題
不可能的,二進制文件中只存在機器碼,不存在源代碼。
C. 用c語言設計一個簡單地加密算,解密演算法,並說明其中的原理
恰巧這兩天剛看的一種思路,很簡單的加密解密演算法,我說一下吧。
演算法原理很簡單,假設你的原密碼是A,用A與數B按位異或後得到C,C就是加密後的密碼,用C再與數B按位異或後能得回A。即(A異或B)異或B=A。用C實現很簡單的。
這就相當於,你用原密碼A和特定數字B產生加密密碼C,別人拿到這個加密的密碼C,如果不知道特定的數字B,他是無法解密得到原密碼A的。
對於密碼是數字的情況可以用下面的代碼:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;
scanf("%ld", &a);
printf("原密碼:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密碼:%ld\n", a);
a ^= b; printf("解密密碼:%ld\n", a);
return 0;
}
如果密碼是字元串的話,最簡單的加密演算法就是對每個字元重新映射,只要加密解密雙方共同遵守同一個映射規則就行啦。
D. 求C語言程序設計 數據加密詳解~!!!
#include<stdio.h>
#define
N
8
void
main()
{
int
code,count,i,temp;
int
key[N];
printf("請輸入密碼:");
scanf("%d",&code);
//各位交換
i=0;
count=0;
while(code!=0)
{
key[i]=code%10;
code
/=
10;
i++;
count++;
}
//各位
加5,並對其取余
for(i=0;i<count;i++)
{
key[i]
+=
5;
key[i]
%=
10;
}
//數字第一位與最後一位互換
temp
=
key[0];
key[0]
=
key[count-1];
key[count-1]
=
temp;
for(i=0;i<count;i++)
{
printf("%d
",key[i]);
}
}
//暈...你是北大青鳥的吧..我昨天剛做了這個項目.剛好發給你了..
E. C語言 關於加密解密的問題
ch=fgetc(kptr) ,你沒考慮空格,再者,for(i=0;(ch=fgetc(kptr)) != EOF;i++),讀取的ch的數量要大於encrypt的長度,所以有問題。
參考我寫的。
F. 關於C語言的加密
'a'的ASC碼是97
'b'的ASC碼是98
'c'的ASC碼是99
... ...
'z'的ASC碼是122
明文和密文相對應
如明文:"abc"
密文:"zyw"
當ch1 = 'a'時,ch2 = 'z'
ch1 - 97 = 97 + 25 - ch2
97 - 97 = 97 + 25 - 122 = 0
當ch1 = 'b'時,ch2 = 'y'
ch1 - 97 = 97 + 25 - ch2
98 - 97 = 97 + 25 - 121 = 1
當ch1 = 'c'時,ch2 = 'w'
ch1 - 97 = 97 + 25 - ch2
99 - 97 = 97 + 25 - 120 = 2
ch1 - 97 = 97 + 25 - ch2這實際上是明文與密文的對應關系,也就是他的演算法
你可以對明文去設定一個對應關系,就可以得到不同的密文
G. C語言 文件異或加密
異或加密是所有加密中最容易實施且代碼量相對精簡的一種加密方式,其原理為任意數據被同一個值(key)兩次異或後,值不變。
這種特性,使得異或加密演算法的加解密流程是完全相同的,也就是說加解密可以用同一個函數實現。
一、演算法思路。
依次讀入文件字元,並用key值對其異或,結果輸入到目標文件中。
二、演算法描述。
1 打開源文件及目標文件。
2 獲取密鑰值(key)。
3 讀入一個字元。
4 對其進行異或計算。
5 結果寫入目標文件。
6 重復3-5直到文件結尾。
7 關閉文件。
三、代碼實現。
為使代碼簡潔易懂,輸入文件設定為in.txt, 輸出文件設定為out.txt, key值設定為0x5C。
假定所有文件及目錄可讀寫。
#include<stdio.h>
#defineIN"in.txt"
#defineOUT"out.txt"
#defineKEY0x5C
voidscrambler(constchar*in,constchar*out,unsignedcharkey)
{
FILE*i,*o;
intc;
i=fopen(in,"rb");
o=fopen(out,"wb");//打開文件,因為假定可讀寫,所以對是否成功不做判斷
while((c=fgetc(i))!=EOF)//讀入字元直到文件結尾
{
c^=key;//執行異或加密或解密
fputc(c,o);//寫入文件
}
fclose(i);
fclose(o);
}
intmain()
{
scrambler(IN,OUT,KEY);
return0;
}
但是異或加密也是有缺陷的。最大的缺陷是加密操作是二進制層面的,獲取到的加密文件大部分將是不可讀的亂碼。這也是為什麼在打開文件的時候要以二進制方式的原因。
鑒於此,在此不便給出測試樣例及輸入輸出,可自行調試。
H. c語言文件加密和解密
c語言文件加密和解密方法如下:
1、首先打開VC++6.0;
voidDecryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
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);
}
}
輸出函數,輸出文件內容
voidOutputFile(FILE*fp)
{
charch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函數,主要調用這幾個函數
intmain()
{
/*用戶輸入的要加密的文件名*/
charsfilename[20];
/*用戶輸入加密後保存的文件名*/
chardfilename[20];
/*用來保存密碼字元*/
charpwd;
FILE*sfp,*dfp;
printf(":
");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密後你要的文件名*/
printf(":
");
gets(dfilename);
/*得到加密字元*/
printf("PleaseinputyourPassword:
");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*來表示輸入的加密字元*/
printf("*
");
/*以只讀方式打開要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can'topenthefile:%s
",sfilename);
exit(0);
}
/*輸出要加密的文件*/
printf(":
");
OutputFile(sfp);
/*建立加密後的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can'topenorcreatethefile:%s
",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf("
Encryptedthefilesuccessfully!
");
/*輸出加密後的文件*/
printf(":
");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return0;
}
I. 關於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);}
J. 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;
}