凯撒密码原理:
凯撒(Caesar)密码,又叫循环移位密码。它的加密方法就是将明文中的每个字母用字母表中该字母后的第M个字母来进行替换,从而进行加密。
加密:
E(x) = (x + a) mod 26
其中,E表示加密函数,x表示为明文;a为密钥(或者说是偏移位数,个人认为。
解密:
D(y) = (y - a) mod 26
其中,D表示解密函数,y为密文,a为密钥。
加密部分的代码:
void Encrypt(char *arr,int a) {
int i = 0;
for (i = 0; i < strlen(arr); i++) {
if (arr[i] >= 'A' && arr[i] <= 'Z') {
arr[i] = ((arr[i] - 'A') + a) % 26 + 'A';
}
else if(arr[i] >= 'a' && arr[i] <= 'z') {
arr[i] = ((arr[i] - 'a') + a) % 26 + 'a';
}
}
printf("加密后的密文为:\n");
printf("%s",arr);
printf("\n");
}
解密部分代码:
void Decry(char *arr, int a) {
int i = 0;
for (i = 0; i < strlen(arr); i++) {
if (arr[i] >= 'A' && arr[i] <= 'Z') {
arr[i] = ((arr[i] - 'A') - a) % 26 + 'A';
}
else if (arr[i] >= 'a' && arr[i] <= 'z') {
arr[i] = ((arr[i] - 'a') - a) % 26 + 'a';
}
}
printf("解密后的明文为:\n");
printf("%s", arr);
printf("\n");
}
全部代码:
#include <stdio.h>
#include<string.h>
//加密
void Encrypt(char *arr,int a) {
int i = 0;
for (i = 0; i < strlen(arr); i++) {
if (arr[i] >= 'A' && arr[i] <= 'Z') {
arr[i] = ((arr[i] - 'A') + a) % 26 + 'A';
}
else if(arr[i] >= 'a' && arr[i] <= 'z') {
arr[i] = ((arr[i] - 'a') + a) % 26 + 'a';
}
}
printf("加密后的密文为:\n");
printf("%s",arr);
printf("\n");
}
//解密
void Decry(char *arr, int a) {
int i = 0;
for (i = 0; i < strlen(arr); i++) {
if (arr[i] >= 'A' && arr[i] <= 'Z') {
arr[i] = ((arr[i] - 'A') - a) % 26 + 'A';
}
else if (arr[i] >= 'a' && arr[i] <= 'z') {
arr[i] = ((arr[i] - 'a') - a) % 26 + 'a';
}
}
printf("解密后的明文为:\n");
printf("%s", arr);
printf("\n");
}
void menu() {
printf("1.加密\n");
printf("2.解密\n");
printf("0.退出\n");
}
int main()
{
char arr[100] = { 0 };
int i = 0;
int a = 0;//偏移量or秘钥 来称呼
int modle = 0;
do {
menu();
printf("请选择模式\n");
scanf("%d", &modle);
switch (modle) {
case 0:
printf("已退出\n");
break;
case 1:
printf("请输入要加密的字符:\n");
scanf("%s", arr);
printf("请输入密钥:\n");
scanf("%d", &a);
Encrypt(arr, a);
break;
case 2:
printf("请输入要解密的字符:\n");
scanf("%s", arr);
printf("请输入密钥:\n");
scanf("%d", &a);
Decry(arr, a);
break;
default:
printf("输入错误:\n");
break;
}
} while (modle);//进行循环输入,利用modle作为循环的条件
return 0;
}
运行结果:
(大小写输入都可)