网络安全-古典加密算法之替代密码加解密算法

替代密码

替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母 a,b,c,d ,用 D,E,F,G 做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码,多明码替代密码,多字母替代密码,多 表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环 移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第 k 个字 母替代。它的加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m 为明文字母在字母表中的位置数; n 为字母表中的字母个数; k 为密钥;E(m) 为密文字母在字母表中对应的位置数。
例如,对于明文字母 H,其在字母表中的位置数为 8,设 k=4,则按照上式计算出 来的密文为 L:
E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

(1) 加密和解密算法

#include<stdio.h>
#define MAX 1024
void encrypt(char m[MAX],int k)  //加密
{
	int loc[MAX];
	char c[MAX];
	for(int i=0;m[i]!='\0';i++) {
		if(m[i]>='a' && m[i]<='z') {
			loc[i]=m[i]-'a'; //位置从0开始
			c[i]=(loc[i]+k)%26+'a';   //密文
		}
		if(m[i]>='A' && m[i]<='Z') {
			loc[i]=m[i]-'A'; //位置从0开始
		    c[i]=(loc[i]+k)%26+'A';   //密文
		}
		printf("%c",c[i]);
	}
	printf("\n");
}
void decode(char m[MAX],int k)   //解密
{ 
	int loc[MAX];
	char c[MAX];
	for(int i=0;m[i]!='\0';i++) {
		if(m[i]>='a' && m[i]<='z') {
			loc[i]=m[i]-'a'; //位置从0开始
			c[i]=(loc[i]-k)%26+'a';   //明文
		}
		if(m[i]>='A' && m[i]<='Z') {
			loc[i]=m[i]-'A'; //位置0个开始
		    c[i]=(loc[i]-k)%26+'A';   //明文
		}
		printf("%c",c[i]);
	}
	printf("\n");
}
int main()
{
	char m[MAX];
	int k;
	printf("请选择:1.加密 2.解密\n");
	int x;
	scanf("%d",&x);
	switch(x) {
		case 1:
			{
				printf("请输入明文:\n");
				scanf("%s",m);
				printf("请输入加密密钥:\n");
				scanf("%d",&k);
				printf("加密后的密文:\n");
				encrypt(m,k);
			}
			break;
		case 2:
			{
				printf("请输入密文:\n");
				scanf("%s",m);
				printf("请输入解密密钥:\n");
				scanf("%d",&k);
				printf("解密后的明文:\n");
				decode(m,k);
			}
			break;
		default: break;
	}
	return 0;
}

加密:
1
解密:
2

猜你喜欢

转载自blog.csdn.net/xu_benjamin/article/details/87874150