替代密码

替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替
代后形成密文。
替代密码包括多种类型,如单表替代密码,多明码替代密码,多字母替代密码,多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环 移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第 k 个字 母替代。它的加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。
源码:

#include<stdio.h>
#define MAX 1000
void encrypt(char m[MAX],int k)       
{
	int l[MAX];
	char c[MAX];
	for(int i=0;m[i]!='\0';i++) {
		if(m[i]>='a' && m[i]<='z') {
			loc[i]=m[i]-'a';           
			c[i]=(l[i]+k)%26+'a';   
		}
		if(m[i]>='A' && m[i]<='Z') {
			loc[i]=m[i]-'A';          
		    c[i]=(l[i]+k)%26+'A';    
		}
		printf("%c",c[i]);
	}
	printf("\n");
}
void decrypt(char m[MAX],int k)         
{ 
	int l[MAX];
	char c[MAX];
	for(int i=0;m[i]!='\0';i++) {
		if(m[i]>='a' && m[i]<='z') {
			l[i]=m[i]-'a'; 
			if(l[i]>=k)               
			c[i]=(l[i]-k)+'a';  
			else
            c[i]=(l[i]-k)+'a'+25;   
		}
		if(m[i]>='A' && m[i]<='Z') {
			l[i]=m[i]-'A';           
		   if(l[i]>=k)                
			c[i]=(l[i]-k)+'A';  
			else
            c[i]=(l[i]-k)+'A'+25;   
		}
		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");
				decrypt(m,k);
			}
			break;
		default: break;
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值