欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言中的文件加密與解密

 更新時間:2023年04月28日 10:23:29   作者:九磅十五便士的業(yè)余編程人  
這篇文章主要介紹了c語言中的文件加密與解密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

c語言文件加密與解密

本程序是一個c語言的大作業(yè)的一部分

是簡單的基于給定密鑰實現(xiàn)的加密解密程序

希望能給后來人一些參考

文件的傳輸會有明文和密文的區(qū)別,明文發(fā)送是不安全的。

本題目實現(xiàn)對文件的加密和解密操作,采用的加密算法是根據(jù)密鑰將明文中的字母置換為其它字母,所有字母不區(qū)分大小寫,不考慮除英文字母外的字符。

例如:

明文是:They will arrive tomorrow,密鑰k=Monday

具體加密過程如下

① 設(shè)置英文字母與0到25有如下的對應(yīng)關(guān)系:

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

②依據(jù)上述對應(yīng)關(guān)系將明文和密鑰轉(zhuǎn)化為一組數(shù)字:

  k=(12,14,13,3,0,24)

  m=(19,7,4,24,22,8,11,11,0,17,17,8,21,4,19,14,12,14,17,17,14,22)

③將明文數(shù)字依據(jù)密鑰長度分段,并逐一與密鑰數(shù)字相加(模26),得到密文數(shù)字,即:

19

7

4

24

22

8

11

11

0

17

17

8

21

4

19

14

12

14

17

17

14

22

12

14

13

3

0

24

12

14

13

3

0

24

12

14

13

3

0

24

12

14

13

3

5

21

17

1

22

6

23

25

13

20

17

6

7

18

6

17

12

12

3

5

1

25

C=(5,21,17,1,22,6,23,25,13,20,17,6,7,18,6,17,12,12,3,5,1,25)

④依據(jù)字母和數(shù)字對應(yīng)關(guān)系將密文數(shù)字轉(zhuǎn)換為字母串,即密文為:

c=FVRBWGXZNURGHSGRMMDFBZ

解密過程與加密過程類似,采用的是模26減運算

功能要求

主函數(shù)提供功能菜單供用戶選擇,用戶可以選擇調(diào)用以下各個功能,也可以選擇退出程序。

系統(tǒng)應(yīng)提供以下功能

  • 加密:對給定文件file1.txt內(nèi)容按照密鑰k=Monday進行加密,加密后密文寫到文件file2.txt中;
  • 解密:對給定密文文件file3.txt 利用密鑰k=Monday進行解密,解密后的明文存放在文件file4.txt中;
#include<stdio.h>
int key[6]={12,14,13,3,0,24};//定義密鑰 
int complex();
int simplify();
int main()
{
	int i=0,j=0;
	printf("功能如下\n1.加密\n2.解密\n3.退出\n");
	printf("請輸入您所需功能對應(yīng)的序號:(例:如需調(diào)用加密功能,便打出1即可)\n");
	for(;;)//直到輸入3時才會退出 
	{
		scanf("%d",&i);
		if(i==1)j=complex();
		if(i==2)j=simplify();
		if(i==3)break;
		if(j==1)printf("\n功能實現(xiàn)成功\n");
		if(j==0)printf("\n功能實現(xiàn)失敗\n"); 
	}
	return 0;
}
int complex() //加密 
{
	FILE *pin, *pout;
	pin = fopen("file1.txt","r");
	pout= fopen("file2.txt","w"); 
	int k=0;
	char Ming[1000],Mi[1000],*p=Ming,*q=Mi; 
	fgets(Ming,1000,pin); //puts(Ming);
	for(;*p!='\0';p++)
	{
		if(*p>='a'&&*p<='z')
		{
			*q=(*p-97+key[k])%26+65;//	printf(" %d %d %c\n",*(key+k),k,*q);
			k=k+1;q++; 
			if(k==6)k=0;
		}
		if(*p>='A'&&*p<='Z')
		{
			*q=(*p-65+key[k])%26+65;//	printf(" %d %d %c\n",*(key+k),k,*q);
			k=k+1;q++;
			if(k==6)k=0;
		}
	}
	*q='\0';
	//printf("密文為:");	//puts(Mi);
	fputs(Mi,pout); 
	fclose(pin);
	fclose(pout);
	return 1;
 } 
 int simplify()//解密 
 {	
 	FILE *pin, *pout;
	pin = fopen("file3.txt","r");
	pout= fopen("file4.txt","w");//打開文件 
	int k=0; //定義密鑰 //k的意義是讓密匙能夠循環(huán)使用 
	char Ming[1000],Mi[1000],*p=Mi,*q=Ming;//定義密文,明文字符串 
	fgets(Mi,1000,pin);//從文件3讀取密文 
	for(;*p!='\0';p++)//解密 
	{ 
		if(*p>='A'&&*p<='Z')
		{
			*q=(*p-65+26+26-*(key+k))%26+65;//printf(" %d %d %c\n",*(key+k),k,*q);//檢驗key出沒出問題 	
			k=k+1;q++;
			if(k==6)k=0;//這兩行代碼讓密鑰循環(huán)使用 
		}	
	}
	*q='\0';//使字符串結(jié)束 
	fputs(Ming,pout);//puts(Ming);檢驗輸出結(jié)果//導(dǎo)出加密結(jié)果 
	fclose(pin);
	fclose(pout); //關(guān)閉兩個文件
	return 1;
 }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++哈希表之閉散列方法的模擬實現(xiàn)詳解

    C++哈希表之閉散列方法的模擬實現(xiàn)詳解

    閉散列指(開放定址法)發(fā)生沖突時,如果哈希表沒有被填滿,則表內(nèi)一定還有其他空閑位置,可以把沖突值放到下一個沒有被占用的空余位置上。本文將模擬實現(xiàn)閉散列方法,需要的可以參考一下
    2022-11-11
  • Matlab實現(xiàn)遺傳算法的示例詳解

    Matlab實現(xiàn)遺傳算法的示例詳解

    這篇文章主要為大家詳細介紹了什么是遺傳算法,以及如何利用Matlab從零開始自己寫一個遺傳算法函數(shù),文中的代碼對我們學(xué)習(xí)有一定幫助,需要的可以參考一下
    2022-03-03
  • LeetCode題解C++生成每種字符都是奇數(shù)個的字符串

    LeetCode題解C++生成每種字符都是奇數(shù)個的字符串

    這篇文章主要為大家介紹了LeetCode題解C++生成每種字符都是奇數(shù)個的字符串示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • C語言基礎(chǔ)全局變量與局部變量教程詳解

    C語言基礎(chǔ)全局變量與局部變量教程詳解

    此處對于全局與局部做一些簡要的介紹,包括全局變量與局部變量,靜態(tài)全局變量與靜態(tài)局部變量,全局函數(shù)與靜態(tài)函數(shù),作者實屬初學(xué),文中若有理解不當(dāng)之處,還請朋友們不吝指正
    2021-11-11
  • QT實現(xiàn)圖片輪播

    QT實現(xiàn)圖片輪播

    這篇文章主要介紹了QT實現(xiàn)圖片輪播,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C語言求解最長公共子字符串問題及相關(guān)的算法分析

    C語言求解最長公共子字符串問題及相關(guān)的算法分析

    最長公共子字符串問題即是求一個字符串在另一個字符串中出現(xiàn)的連續(xù)最多字符,這里我們來看一下面試中經(jīng)常出現(xiàn)的C語言求解最長公共子字符串問題及相關(guān)的算法分析
    2016-06-06
  • C++中隊列queue的用法實例詳解

    C++中隊列queue的用法實例詳解

    隊列先進先出,即只能在容器的末尾添加新元素,只能從頭部移除元素,下面這篇文章主要給大家介紹了關(guān)于C++中隊列queue用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • QT實現(xiàn)動態(tài)時鐘

    QT實現(xiàn)動態(tài)時鐘

    這篇文章主要為大家詳細介紹了QT實現(xiàn)動態(tài)時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法

    C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法

    這篇文章主要為大家詳細介紹了C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++通過CryptoPP計算Hash值的過程詳解

    C++通過CryptoPP計算Hash值的過程詳解

    Crypto++ (CryptoPP) 是一個用于密碼學(xué)和加密的C++庫,它是一個開源項目,提供了大量的密碼學(xué)算法和功能,本文小編給大家介紹了C++通過CryptoPP計算Hash值的過程,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11

最新評論