【百度百科】在​​密码学​​中,恺撒密码(英语:Caesar cipher),或称恺撒加密恺撒变换变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,​​明文​​​中的所有字母都在​​字母表​​​上向后(或向前)按照一个固定数目进行偏移后被替换成​​密文​​​。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期​​恺撒​​的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

📚 加密数据的方法有很多种,其中最基础的是凯撒密码算法(Caesar Cipher Algorithm),

请写一个程序完成此算法。加密方法满足下列关系式:

【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm_i++

【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm_算法_02

💭 比如:key2 P "ABCDE" 时 ,则 C 为 "CDEFG"  

【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm_算法_03

(Plain text 为加密前的内容,Cipher text 为加密后的内容)

📌 要求:

① 限制要加密的内容长度为 30 以下,以 

【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm_c语言_04

 储存。

② 只加密 26 个字母(大小写),其余文字都不用加密。

③ 定义一个 encryption 函数,加密部分在此函数内实现。

④ 运行结果演示:(测试语句:Hello world! I'm LeiJun, Are you ok?)

【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm_算法_05

💬 参考答案:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* encryption (char* P, int key) {
int len = strlen(P);
char* Ciphertext = (char*)malloc((len + 1) * sizeof(char));

for (int i = 0; i < len; i++) {
if ('A' <= P[i] && P[i] <= 'Z') {
Ciphertext[i] = (P[i] - 'A' + key) % 26 + 'A';
} else if ('a' <= P[i] && P[i] <= 'z') {
Ciphertext[i] = (P[i] - 'a' + key) % 26 + 'a';
} else {
Ciphertext[i] = P[i];
}
}
Ciphertext[len] = '\0';

return Ciphertext;
}

int main(void) {
int key, len, i = 0;
char ch, P[31], * C;

printf("Input the plain text: ");
while (1) {
scanf("%c", &ch);
if(ch == '\n') {
break;
}
P[i++] = ch;
}
P[i] = '\0';

while (1) {
printf("Input key: ");
scanf("%d", &key);
if (key >= 0 && key < 26) {
break;
} else {
printf("0 <= key <= 26\n");
continue;
}
}

C = encryption(P, key);
printf("Encrypt(%s) = %s\n", P, C);
printf("Decrypt(%s) = %s\n", C, encryption(C, 26 - key)); //利用encryption函数解密

if (C != NULL) {
free(C);
}

return 0;
}

参考资料

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

📌 笔者:王亦优

📃 更新: 2021.11.28

❌ 勘误: 无

📜 声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

本篇完。