国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言實(shí)現(xiàn)簡單加密算法 凱撒密碼 RSA算法 簡介及實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了C語言實(shí)現(xiàn)簡單加密算法 凱撒密碼 RSA算法 簡介及實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

凱撒密碼的原理以及實(shí)現(xiàn)過程:

1.算法介紹

凱撒密碼的核心思想就是移位。?將明文的每一個(gè)字符 在 密碼系統(tǒng)所支持字符序列中向右平移N,映射得到新的字符從而實(shí)現(xiàn)加密,而解密則相反向左平移N。加密的Key即為N。

2.實(shí)驗(yàn)測試

加密

凱撒密碼c語言編程實(shí)現(xiàn),c語言,網(wǎng)絡(luò)安全,算法

?解密

凱撒密碼c語言編程實(shí)現(xiàn),c語言,網(wǎng)絡(luò)安全,算法

3.源代碼?

#include <stdio.h> 
#include <stdlib.h>
int main ()
{
	char small_letter[26]={'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'};
	char big_letter[26]={'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'};
	char text[1000],result[1000];
	int c,count=0,k,p;
	char function;
	printf("Insert Text:");
	c=getchar();
	while(1) //讀取字符串
	{
		if(c == '\n') break;
				text[count]=c;
		printf("%c",text[count]);
		count++;
		c=getchar();
	}
	
	printf("\n");
	printf("Encrypt or Decrypt? E or D :");
	scanf("%c",&function);
	if (function == 'E')
	{
		printf("Insert Key :" );
		scanf("%d",&k);
		for(int i=0;i<count;i++)
		{
			if(text[i]>='A'&&text[i]<='Z')
			{
				result[i]=big_letter[((text[i]-'A')+k)%26];
			}
			//找出加密后字符在字符數(shù)組里的對(duì)應(yīng)位置
			else if (text[i]>='a'&&text[i]<='z')
			{
				result[i]=small_letter[((text[i]-'a')+k)%26];
			}
			else result[i]=text[i];
			printf("%c",result[i]);
		}
	}
	
	else 
	{
		printf("Insert Key :" );
		scanf("%d",&k);
		for(int i=0;i<count;i++)
		{
			if(text[i]>='A'&&text[i]<='Z')
			{
				p=((text[i]-'A')-k);
				while(p<0)p+=26;
				result[i]=big_letter[p];
			}
			//找出解密后字符在字符數(shù)組里的對(duì)應(yīng)位置
			//這里要注意不要讓它超出范圍(下表位置為負(fù)數(shù))
			else if (text[i]>='a'&&text[i]<='z')
			{
				p=((text[i]-'a')-k);
				while(p<0)p+=26;
				result[i]=small_letter[p];
			}
			else result[i]=text[i];
			printf("%c",result[i]);
		}
		printf("\n");
	}
return 0;
}

RSA算法的原理以及實(shí)現(xiàn)過程:

1.算法介紹

在如今的萬維網(wǎng)環(huán)境中,如果A要向B發(fā)送數(shù)據(jù),需要先加密這個(gè)數(shù)據(jù),因?yàn)樵谝恍┎话踩木W(wǎng)絡(luò)環(huán)境中上網(wǎng),是很容易被攔截到發(fā)送的數(shù)據(jù)的,如果使用對(duì)稱加密,密鑰傳遞在網(wǎng)絡(luò)中被攔截了也一樣可以解密,也不可能用線下告知消息接收方密鑰的這種方式來進(jìn)行通信。

在這種情況下第一代非對(duì)稱加密算法RSA出現(xiàn)了,RSA是1977年由在麻省理工學(xué)院工作的Ron Rivest、Adi Shamir和Leonard Adleman一起提出的,RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。在A想要發(fā)送數(shù)據(jù)給B時(shí),A先會(huì)找B讓B產(chǎn)生一對(duì)公私鑰對(duì)e和d(e為公鑰d為私鑰)和一個(gè)大數(shù)n,然后B會(huì)把e和n發(fā)送給A,A收到后會(huì)用e和n加密數(shù)據(jù)之后再發(fā)送給B,B收到數(shù)據(jù)后就能用私鑰d來解密出A發(fā)送的數(shù)據(jù)。公鑰具有加密之后就無法再用公鑰解密的特性,即使獲取到了公鑰和加密后的數(shù)據(jù),也無法解密出原始數(shù)據(jù)

2.實(shí)驗(yàn)測試

加密與解密

凱撒密碼c語言編程實(shí)現(xiàn),c語言,網(wǎng)絡(luò)安全,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-717556.html

3.源代碼

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
 
const int max=2e4;
int size;
int miwen[max];//為加密后的數(shù)字密文
char mingwen[max]; 
 
//判斷兩個(gè)數(shù)是否互為素?cái)?shù)  eg:p和q e和 t 
bool gcd(int p,int q)
{
	int m,n;
	if(q<p)
	{
		m=p;  p=q;  q=m;  //將p換成p和q之間那個(gè)小的數(shù) 
		m=q%p;  n=q/p;  //輾轉(zhuǎn)相除法求兩個(gè)數(shù)的最大公因數(shù) 
	}
	while(m!=0)
	{
		q=p; p=m;  //將p換成p和q之間那個(gè)小的數(shù)
		m=q%p;  n=q/p;		
	} 
	if(m==0&&n==q)
	{
		printf("符合條件!\n");
			return true;
	}
	else{
		printf("不符合條件!請重新輸入:\n");
	    	return false;
	}
} 
//判斷輸入的p和q是不是素?cái)?shù) 
bool sushu(int s){
	for(int i=2;i<s;i++){
		if(s%i==0) 
		return false;
	}
	return true;
}
//求私鑰d
int siyao(int e,int t)  //t:歐拉函數(shù) 
{
	int d;
	for(d=0;d<t;d++)
	    if(e * d % t==1)
	       return d;
}
//隨機(jī)生成與 t互質(zhì)的數(shù)e
int getrand(int p,int q)
{
	int t=(p-1)*(q-1);
	while(1)
	{
		int e=rand() % t;
		if(e>100) {
		if(gcd(e,t)==1)
		return e;}
	//	if(e<=2)
	//	e=3;
	}
}
void jiami(int e,int n) 
{
	//先將符號(hào)明文轉(zhuǎn)換成字母所對(duì)應(yīng)的ascii碼。 
	char mingwen[100];    //符號(hào)明文 
	printf("請輸入明文:\n");
	scanf("%s",mingwen);
	size=strlen(mingwen);
	int ming[strlen(mingwen)];   //定義符號(hào)明文 
	for(int i=0;i<strlen(mingwen);i++)
	{
	   ming[i]=mingwen[i];        //將字母轉(zhuǎn)換成對(duì)應(yīng)的ascii碼。 
	//printf("%d",mingwen[i]);  //將字母轉(zhuǎn)換成對(duì)應(yīng)的ascii碼。可以不輸出 
	} 
	int flag=1;    //miwen為加密后的數(shù)字密文 
	for(int i=0;i<strlen(mingwen);i++)
	{
	    for(int j=0;j<e;j++)
		{
		    flag=flag*ming[i]%n; 
	    }
	    miwen[i]=flag; 
	    flag=1;
	} 
	printf("加密密文為:\n");
	for(int i=0;i<strlen(mingwen);i++) 
	printf("%d",miwen[i]); 
}
void jiemi(int d,int n)
{
	int de_mingwen[size],flag=1;//解密后得到的數(shù)字明文(即ascii碼) 
	char de_ming[size];//解密后得到的字符串明文 
	for(int i=0;i<size;i++)
	{
	   for(int j=0;j<d;j++)
	   {
	   	  flag=flag*miwen[i]%n;
	   }
	   de_mingwen[i]=flag; 
	   flag=1;
	} 
	printf("解密后的明文為:\n");
	for(int i=0;i<size;i++)
	{
		de_ming[i]=de_mingwen[i];
		printf("%c",de_ming[i]);
	}
}

int main()
{
	int p,q,e,d,n,t,tep;
	while(1)
	{
		printf("請輸入p:",p);
		scanf("%d",&p);
		tep=sushu(p);
		if(tep==0)
		{
			printf("p不是素?cái)?shù),請重新輸入p!\n");
		    continue;
		} 
		printf("請輸入q:",q);
		scanf("%d",&q);
	    tep=sushu(q);
	    if(tep==0)
		{
		printf("q不是素?cái)?shù),請重新輸入q!\n");
		printf("請輸入q:",q);
		scanf("%d",&q);
		tep=sushu(q);
		}
		int n=p*q;
		int t=(p-1)*(q-1);
		tep=gcd(p,q);
		if(tep==0)   continue;
		printf("t=(q-1)*(p-1)=%d\n",t);
		e=getrand(p,q);
		printf("公鑰(e=%d n=%d)\n",e,n);
		tep=(e,t);
		d=siyao(e,t);
		printf("私鑰d=%d",d);
		int a=0;
		while(a!=3)
		{
			printf("\n-------------------------\n");
			printf("1、加密\n");
	        printf("2、解密\n");
	        printf("3、退出");
	        printf("\n-------------------------\n");
	        scanf("%d",&a);
	        getchar();
	        if(a==1)
	        {
	        	jiami(e,n);
	        }
	        else if(a==2)
	        {
	        	printf("請輸入密鑰:");
		        scanf("%d",&d);
		        jiemi(d,n);
	        }
	        else 
			     return 0;
		}		
    }
    return 0;
}

到了這里,關(guān)于C語言實(shí)現(xiàn)簡單加密算法 凱撒密碼 RSA算法 簡介及實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言實(shí)現(xiàn)簡單的RSA加解密算法

    使用c語言實(shí)現(xiàn)了簡單的RSA加解密算法。 實(shí)驗(yàn)內(nèi)容: 1、輸入兩個(gè)素?cái)?shù),然后生成一個(gè)隨機(jī)數(shù),計(jì)算出隨機(jī)數(shù)的逆元,然后保存這些信息; 2、選擇加密,則輸入明文,輸出密文; 3、選擇解密,則輸入密鑰,輸出明文。 我把輸入的數(shù)據(jù)當(dāng)做了字符串,所以沒有問題對(duì)于漢字,

    2024年02月11日
    瀏覽(18)
  • 詳解 DES加密技術(shù) | 凱撒密碼 | 柵欄密碼

    詳解 DES加密技術(shù) | 凱撒密碼 | 柵欄密碼

    目錄 密碼學(xué) 愷撒密碼 柵欄密碼 消息和加密 密碼的三個(gè)特性 算法和密鑰 對(duì)稱算法 公開密鑰算法 DES對(duì)稱加密技術(shù) DES算法的安全性 DES算法的原理 DES算法的實(shí)現(xiàn)步驟 IP置換表和IP-1逆置換表 ?函數(shù)f 子密鑰ki S盒的工作原理 DES算法的應(yīng)用誤區(qū) ????????密碼學(xué)是一門古老而深?yuàn)W

    2024年02月06日
    瀏覽(17)
  • 加密與安全_ 凱撒密碼

    加密與安全_ 凱撒密碼

    PKI - 02 對(duì)稱與非對(duì)稱密鑰算法 凱撒密碼是一種簡單的替換加密技術(shù),也稱為移位密碼。它是古典密碼學(xué)中最早的密碼之一,得名于古羅馬軍隊(duì)領(lǐng)袖凱撒·尤利烏斯(Julius Caesar),據(jù)說他曾經(jīng)使用過這種加密方法。 愷撒密碼,也稱為愷撒加密或愷撒變換,是一種最古老且最簡

    2024年03月15日
    瀏覽(19)
  • 密碼學(xué):一文讀懂非對(duì)稱加密算法 DH、RSA

    密碼學(xué):一文讀懂非對(duì)稱加密算法 DH、RSA

    我們可能沒有在瑞士蘇黎世銀行存入巨額資產(chǎn)的機(jī)會(huì),但相信大多數(shù)人都在電影中見到這樣一組鏡頭: 戶主帶著自己的鑰匙來到銀行,要求取出自己寄放的物品。銀行工作人員驗(yàn)明戶主身份后,拿出另一把鑰匙同戶主一起打開保險(xiǎn)柜,將用戶寄放物品取出。我們可以把這個(gè)保

    2024年01月21日
    瀏覽(35)
  • 凱撒密碼_c++_java_python(加密及解密)

    公元前100多年凱撒發(fā)明的一種密碼,簡單來說是平移密碼,也就是將字母位置向后移動(dòng)一定位數(shù)。 如原文是ABCXYZ,密鑰為3,加密后就是DEFABC。 以密鑰的數(shù)字向后平移了三位,如果密鑰是5就是平移五位。 解密就是把加密的文字進(jìn)行還原。 我們通過對(duì)題目的分析可以發(fā)現(xiàn),加

    2024年02月06日
    瀏覽(18)
  • Django用RSA實(shí)現(xiàn)Web登錄加密傳輸,預(yù)防抓包泄漏密碼,解決ModelForm無法實(shí)現(xiàn)傳輸加密問題

    問題: ????????在使用Django學(xué)習(xí)制作網(wǎng)站時(shí)候,以為后端鉤子處理使用了md5加密,數(shù)據(jù)庫中也同樣以md5的方式存儲(chǔ),這樣就解決了密碼泄漏問題,因?yàn)閷?duì)前端沒有足夠的了解所以枉下次定論。 ????????在測試爬取自己的網(wǎng)站時(shí)候發(fā)現(xiàn),登錄頁面控制臺(tái)能抓包看見密碼明

    2024年02月01日
    瀏覽(13)
  • RSA加密算法Python實(shí)現(xiàn)

    RSA加密算法Python實(shí)現(xiàn)

    1977年,三位數(shù)學(xué)家 Rivest、Shamir 和 Adleman 設(shè)計(jì)了一種算法,可以實(shí)現(xiàn)非對(duì)稱加密。這種算法用他們?nèi)齻€(gè)人的名字命名,叫做RSA算法.RSA算法的特征如下: RSA算法是非對(duì)稱加密算法,及算法的加密密鑰與解密密鑰不同 RAS是基于大數(shù)分解問題實(shí)現(xiàn)的算法, RSA算法的密鑰長度一般為

    2024年01月18日
    瀏覽(20)
  • C# 實(shí)現(xiàn)對(duì)稱加密算法(AES)與非對(duì)稱加密算法(RSA),包含前端加密對(duì)應(yīng)算法實(shí)現(xiàn)

    C# 實(shí)現(xiàn)對(duì)稱加密算法(AES)與非對(duì)稱加密算法(RSA),包含前端加密對(duì)應(yīng)算法實(shí)現(xiàn)

    一種既簡單速度又快的加密方式,加密與解密使用的都是同一個(gè)密鑰,別名又叫做:單密鑰加密;對(duì)稱加密有很多公開算法,并且因?yàn)樗屎芨?,所以適用于加密大量數(shù)據(jù)的場合;但其密鑰的傳輸過程是不安全的,并且容易被破解,密鑰管理起來也相對(duì)麻煩。 需要兩個(gè)密鑰

    2024年02月09日
    瀏覽(36)
  • RSA加密算法講解及C++實(shí)現(xiàn)

    RSA加密算法講解及C++實(shí)現(xiàn)

    一.加密原理? ?? ? ?? ? ? 二.C++實(shí)現(xiàn) 3.1實(shí)現(xiàn)加解密算法 加解密算法示例: 2.2實(shí)現(xiàn)pqed的生成 2.2.1找出質(zhì)數(shù)P、Q? 2.2.2計(jì)算公共模數(shù)N=P*Q ?2.2.3歐拉函數(shù)F(N)=(P-1)*(Q-1) ?2.2.4計(jì)算公鑰E 2.2.5?計(jì)算私鑰D 完整代碼 此步驟講解建立在了解歐拉函數(shù)等數(shù)學(xué)基礎(chǔ)和密碼學(xué)基礎(chǔ)上的。 步驟

    2023年04月16日
    瀏覽(21)
  • 公開密鑰加密之RSA算法【概念+計(jì)算+代碼實(shí)現(xiàn)】

    公開密鑰加密之RSA算法【概念+計(jì)算+代碼實(shí)現(xiàn)】

    ??推薦閱讀:http://t.csdn.cn/nQfIY?? 安全算法:公開密鑰加密之RSA算法 公開密鑰加密(又稱“非對(duì)稱加密”)是加密和解密使用不同密鑰的一種加密方法。包括公開密鑰和私有密鑰(成對(duì)生成的,網(wǎng)上有工具網(wǎng)站)。 公開密鑰(public key,后面簡稱P):加密用的密鑰 私有密鑰

    2023年04月17日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包