當前位置:首頁 » 編程語言 » c語言解密

c語言解密

發布時間: 2022-10-23 17:28:20

『壹』 c語言設計一個簡單的加密解密程序

C語言設計一個簡單的加密解密程序如下:
加密程序代碼:
#include

main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#include

#include

main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("請輸入待解密文件名:\n");
scanf("%s",filename);
printf("請輸入驗證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗證碼錯誤!請重新輸入:\n");
scanf("%s",filename);
}
}

『貳』 用C語言實現文件的加密與解密的思路是什麼

設置加密演算法,如將文件以二進制打開,每個位元組加(或減、乘、除、模等等)一個數,設置類似的一個加密演算法。將該文件重新生成一次。完成加密過程。解密過程既是對加密過程的逆運算,保證將沒個位元組還原成為文件原貌即可。另外,不一定針對每個位元組進行運算,加密的位元組仍然可以通過演算法確定,例如,奇數位元組、偶數位元組等進行加密操作。

『叄』 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;
}


『肆』 C語言 文件加密解密

根據你的需要,修改了之前的代碼。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

constunsignedintMAX_KEY_LENGTH=1000;

intencode(charconst*datafile,charconst*keyfill);
intdecode(charconst*datafile,charconst*keyfile);
intloadKey(charconst*keyfile,int*keys,unsignedintsize);
intsaveKey(charconst*keyfile,int*keys,unsignedintsize);
intgenerateKey(int*keys,unsignedintsize);

intmain(intargc,charconst*argv[])
{
chardatafile[]="encrypted.txt";
charkeyfile[]="key.txt";
intretcode,choice,loop=1;
charch[5]={''};

while(1)
{
printf("1.Encryption. ");
printf("2.Decryption. ");
printf("3.Exit. ");
printf("Selection(1,2,3):");
fgets(ch,sizeof(ch),stdin);
sscanf(ch,"%d",&choice);
switch(choice)
{
case1:
retcode=encode(datafile,keyfile);
if(retcode!=0)printf("error,%d",retcode);
break;

case2:
retcode=decode(datafile,keyfile);
if(retcode!=0)printf("error,%d",retcode);
break;

case3:
loop=0;
break;
default:
;
break;
}
if(0==loop)break;
}
return0;
}


intgenerateKey(int*keys,unsignedintsize)
{
charstr[]=",./;"'<>?";
size_tstr_len=sizeof(str)/sizeof(str[0]);
inti;

srand(time(NULL));
for(i=0;i<size;++i)
keys[i]=str[rand()%str_len];

return0;
}

intloadKey(charconst*keyfile,int*keys,unsignedintsize)
{
inti=0;
FILE*pfile;
intretcode=0;

pfile=fopen(keyfile,"r");
if(pfile==NULL)return-1;

while(!feof(pfile)){
if(i<size)
fscanf(pfile,"%d",&keys[i++]);
else
break;
}
fclose(pfile);
returni;
}

intsaveKey(charconst*keyfile,int*keys,unsignedintsize)
{
FILE*pfile;
inti;

pfile=fopen(keyfile,"w");
if(pfile==NULL)return-1;

for(i=0;i<size;++i){
fprintf(pfile,"%d",keys[i]);
}
fclose(pfile);
return0;
}

intencode(charconst*datafile,charconst*keyfile)
{
charoriginal[MAX_KEY_LENGTH]={''};
charencrypted[MAX_KEY_LENGTH]={''};
inti,size;
intkeys[MAX_KEY_LENGTH];
FILE*pdatafile,*pkeyfile;

pkeyfile=fopen(keyfile,"w");
if(NULL==pkeyfile)return-1;
fclose(pkeyfile);

puts("inputmessage:");
gets(original);
size=strlen(original);
if(0!=generateKey(keys,size))return-2;
if(0!=saveKey(keyfile,keys,size))return-3;

pdatafile=fopen(datafile,"w");
if(NULL==pdatafile)return-4;

for(i=0;i<size;++i){
encrypted[i]=original[i]+keys[i];
fputc(encrypted[i],pdatafile);
fputc(encrypted[i],stdout);
}
printf(" ");
fclose(pdatafile);
return0;
}

intdecode(charconst*datafile,charconst*keyfile)
{
FILE*pdatafile,*pkeyfile;
intkeys[MAX_KEY_LENGTH]={0};
charoriginal[MAX_KEY_LENGTH]={''};
charencrypted[MAX_KEY_LENGTH]={''};
inti,size;

pkeyfile=fopen(keyfile,"r");
if(NULL==pkeyfile)return-1;
fclose(pkeyfile);
pdatafile=fopen(datafile,"r");
if(NULL==pdatafile)return-2;

fscanf(pdatafile,"%s",encrypted);
fclose(pdatafile);

size=loadKey(keyfile,keys,MAX_KEY_LENGTH);
if(size<1)return-3;

for(i=0;i<strlen(encrypted);++i){
original[i]=encrypted[i]-keys[i];
fputc(original[i],stdout);
}
printf(" ");
return0;
}

運行結果:

1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):1
input message:
this is A test!
╓┐»╞Lñ╗ù|t▄╬╢╒è
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):2
this is A test!
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):3

『伍』 C語言設計一個簡單的加密解密程序

C語言設計一個簡單的加密解密程序如下:
加密程序代碼:
#include<stdio.h>
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#include<stdio.h>
#include<string.h>
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("請輸入待解密文件名:\n");
scanf("%s",filename);
printf("請輸入驗證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗證碼錯誤!請重新輸入:\n");
scanf("%s",filename);
}
}

『陸』 c語言加密解密演算法

這里使用的是按位加密,按ASCII碼進行加密的演算法自己寫個,很容易的。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*對文件進行加密的具體函數*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定義main()函數的命令行參數*/
{
char
in_fname[30];/*用戶輸入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用來保存密碼*/
if(argc!=4)
{/*容錯處理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/*得到密碼*/
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密後你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密請再次運行程序\n");
}
else
{/*如果命令行參數正確,便直接運行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密請再次運行程序\n");
}
}
/*加密子函數開始*/
void
dofile(char
*in_fname,char
*pwd,char
*out_file)
{
FILE
*fp1,*fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot
open
in-file.\n");
exit(1);/*如果不能打開要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot
open
or
create
out-file.\n");
exit(1);/*如果不能建立加密後的文件,便退出*/
}
/*加密演算法開始*/
while(j0>=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=j0?j=0:j++],fp2);/*異或後寫入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*關閉源文件*/
fclose(fp2);/*關閉目標文件*/
}
void
usage(char
*name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1.txt
12345678
file2.txt\n",name);
}

『柒』 C語言 解密

#include<stdio.h>
#include<string.h>
main()
{chars[100][1000],a[100][500];
inti,j,n,m1,m2,l,b[100][500];
while(1){
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(s[i]);
for(i=0;i<n;i++){
l=strlen(s[i]);
for(j=0;j<l;j+=2){
if(s[i][j]<='9')
m1=s[i][j]-'0';
else
m1=s[i][j]-'A'+10;
if(s[i][j+1]<='9')
m2=s[i][j+1]-'0';
else
m2=s[i][j+1]-'A'+10;
b[i][j/2]=m1*16+m2;
if(b[i][j/2]<26)a[i][j/2]=b[i][j/2]+'A';
if(b[i][j/2]>25&&b[i][j/2]<52)a[i][j/2]=b[i][j/2]-26+'a';
if(b[i][j/2]==95)a[i][j/2]='_';
if(b[i][j/2]==59)a[i][j/2]=';';
}
}
printf(" ");
for(i=0;i<n;i++)printf("%s ",a[i]);
}
}

如圖所示,望採納。。。。。。

『捌』 RSA加密解密演算法示例(C語言)

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

#include <time.h>

#define PRIME_MAX 200   // 生成素數范圍

#define EXPONENT_MAX 200 // 生成指數e范圍

#define Element_Max 127    // 加密單元的最大值,這里為一個char, 即1Byte

char str_read[100]="hello world !";  // 待加密的原文

int str_encrypt[100];                // 加密後的內容

char str_decrypt[100];              // 解密出來的內容

int str_read_len;                    // str_read 的長度

int prime1, prime2;                  // 隨機生成的兩個質數

int mod, eular;                      // 模數和歐拉數

int pubKey, priKey;                  // 公鑰指數和私鑰指數

// 生成隨機素數,實際應用中,這兩個質數越大,就越難破解。

int randPrime()

{

int prime, prime2, i;

next:

prime = rand() % PRIME_MAX;   // 隨機產生數

if (prime <= 1) goto next;      // 不是質數,生成下一個隨機數

if (prime == 2 || prime == 3) return prime;

prime2 = prime / 2;              // prime>=4, prime2 的平方必定大於 prime , 因此只檢查小於等於prime2的數

for (i = 2; i <= prime2; i++)   // 判斷是否為素數

{

if (i * i > prime) return prime;

if (prime % i == 0) goto next;  // 不是質數,生成下一個隨機數

}

}

// 歐幾里德演算法,判斷a,b互質

int gcd(int a, int b)

{

int temp;

while (b != 0) {

temp = b;

b = a % b;

a = temp;

}

return a;

}

//生成公鑰指數,條件是 1< e < 歐拉數,且與歐拉數互質。

int randExponent()

{

int e;

while (1)

{

e = rand() % eular; if (e < EXPONENT_MAX) break;

}

while (1)

{

if (gcd(e, eular) == 1) return e; e = (e + 1) % eular; if (e == 0 || e > EXPONENT_MAX) e = 2;

}

}

//生成私鑰指數

int inverse()

{

int d, x;

while (1)

{

d = rand() % eular;

x = pubKey * d % eular;

if (x == 1)

{

return d;

}

}

}

//加密函數

void jiami()           

{

str_read_len = strlen(str_read);      //從參數表示的地址往後找,找到第一個'\0',即串尾。計算'\0'至首地址的「距離」,即隔了幾個字元,從而得出長度。

printf("密文是:");

for (int i = 0; i < str_read_len; i++)

{

int C = 1; int a = str_read[i], b = a % mod;

for (int j = 0; j < pubKey; j++) //實現加密

{

C = (C*b) % mod;

}

str_encrypt[i] = C;

printf("%d ", str_encrypt[i]);

}

printf("\n");

}

//解密函數

void jiemi()         

{

int i=0;  for (i = 0; i < str_read_len; i++)

{

int C = 1; int a = str_encrypt[i], b=a%mod;

for (int j = 0; j < priKey; j++)

{

C = (C * b) % mod;

}

str_decrypt[i] = C;

}

str_decrypt[i] = '\0'; printf("解密文是:%s \n", str_decrypt);

}

int main()

{

srand(time(NULL));

while (1)

{

prime1 = randPrime(); prime2 = randPrime(); printf("隨機產生兩個素數:prime1 = %d , prime2 = %d ", prime1, prime2);

mod = prime1 * prime2; printf("模數:mod = prime1 * prime2 = %d \n", mod); if (mod > Element_Max) break; // 模數要大於每個加密單元的值

}

eular = (prime1 - 1) * (prime2 - 1);  printf("歐拉數:eular=(prime1-1)*(prime2-1) = %d \n", eular);

pubKey = randExponent(); printf("公鑰指數:pubKey = %d\n", pubKey);

priKey = inverse(); printf("私鑰指數:priKey = %d\n私鑰為 (%d, %d)\n", priKey, priKey, mod);

jiami(); jiemi();

return 0;

}

『玖』 C語言 文件加密解密

文件中啊!(C)
首先file1中存一些信息(直接在文件中手寫或者通過源程序從屏幕中讀取)
大致過程{
fp1 = fopen("file1", "w");//write
scanf("%c", &ch1);//用while循環多次寫入
fprintf(fp1, "%c", ch1);
}
第二:從文件中讀取內容,和0x6a異或

fp2 = fopen ("file1", "r")//read
fp3 = fopen ("file2", "w")//write

fscanf(fp2, "%c", &ch2);//用while循環多次讀出
異或操作,結果賦給ch3;
printf("%c", ch );//屏幕顯示
fprintf(fp3, "%c", ch3);//寫入file2中

第三:讀出file2的內容
fp3 = fopen ("file2", "r")//read

fscanf(fp3, "%c", &ch4);//用while循環多次讀出
printf(「%c」, ch );

大概過程就是這樣,文件主要是自己寫才能掌握,這里就不把代碼給你了。
上面的部分代碼給你參考一下。有問題歡迎詢問
源程序只是負責操作;file1和file2是存放數據的文件,可以看成結構體。
文件操作好好學,很重要!

『拾』 如何用C語言對文件進行加密和解密

對於加密要求不高的完全可以自己定義規則來進行加密。這種加密是很簡單很自由的,例如你在存文件的時候可以將文件中的每個字元都加上一個數,然後讀取該文件的時候再每個字元相應地減去那個數,即可實現就簡單的加密,這樣你儲存的文件看上去就是亂碼了。只是這個規則太簡單,規則你可以自己定,加密與解密對著來就行了。
下面程序用異或操作對文件進行加密和解密
/****************** 設計思路 ******************/
// 根據用戶輸入的加密/機密密碼,
// 每次都拿原文件和密碼等長度的一個字元串和密碼
// 對應元素異或進行加密/解密
// 另外因為是用異或方法,所以加密和解密就是同一個程序
// 即按照同樣的加密即是對文件的解密

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>

char filename[256]; // 原文件
char password[256]; // 加密/解密密碼
const char filenametemp[] = "temp15435255435325432543.temp"; // 加密/解密中間文件

void inputpass(char *pass); //密碼輸入以"******"顯示

void main() {

FILE *fp; // 加密/解密的文件
FILE *fptemp; // 加密/解密過程臨時文件
int pwdlen; // 密碼長度
int i = 0; // 計數器
char ch = 0; // 讀入的字元

printf("請輸入要加密/解密的文件名(全路徑名): \n");
gets(filename);
if( (fp = fopen(filename, "rb")) == NULL) {
printf("找不到文件 %s\n", filename);
exit(1);
} // if

printf("請輸入要加密/解密的密碼: \n");
inputpass(password);
pwdlen = strlen(password);
if(pwdlen == 0) {
printf("密碼不能為空,加密/解密失敗\n");
exit(1);
} // if

fptemp = fopen(filenametemp, "wb"); // 打開中間文件
while(1) {
ch = fgetc(fp);// 從原文件讀入一個字元
if(feof(fp)) { // 已經讀到文件尾
break; // 退出循環
}
ch ^= password[i++]; // 對原字元和密碼進行異或操作
fputc(ch, fptemp); // 將異或結果寫入中間文件
if(i == pwdlen) { // 使得原文件每和密碼長度相同的固定長度異或加密
i = 0;
}
} // while

fclose(fp); // 關閉打開原文件
fclose(fptemp); // 關閉打開中間文件

remove(filename); // 刪除原文件
rename(filenametemp, filename); // 將中間文件重命名為原文件
printf("加密/解密成功\n"); // 至此加密/解密成功

}

// 密碼輸入以"******"顯示
void inputpass(char *pass) {
int i = 0;
char c;
while(isprint(c = getch())) {
pass[i++] = c;
// printf("*");
}
pass[i] = '\0';
printf("\n");
}

熱點內容
微電動汽車基本配置具備哪些 發布:2025-01-01 08:06:06 瀏覽:140
c語言計算ab的值 發布:2025-01-01 07:38:52 瀏覽:629
如何配置好健康保障 發布:2025-01-01 07:38:52 瀏覽:862
0基礎怎樣快速學習編程 發布:2025-01-01 07:34:35 瀏覽:718
安卓的動態效果在哪裡 發布:2025-01-01 07:32:49 瀏覽:114
win10ftp下載 發布:2025-01-01 07:30:31 瀏覽:814
江西南昌電信ip伺服器雲伺服器 發布:2025-01-01 07:22:44 瀏覽:997
圖形學演算法書 發布:2025-01-01 07:20:41 瀏覽:562
ftp不安全的伺服器 發布:2025-01-01 07:19:34 瀏覽:556
pdf加密了不能復制 發布:2025-01-01 07:12:05 瀏覽:501