【C语言刷题】凯撒密码算法 | Caesar Cipher Algorithm
原创
©著作权归作者所有:来自51CTO博客作者柠檬叶子C的原创作品,请联系作者获取转载授权,否则将追究法律责任
【百度百科】在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
📚 加密数据的方法有很多种,其中最基础的是凯撒密码算法(Caesar Cipher Algorithm),
请写一个程序完成此算法。加密方法满足下列关系式:
💭 比如:key 为 2 ,P 为 "ABCDE" 时 ,则 C 为 "CDEFG"
(Plain text 为加密前的内容,Cipher text 为加密后的内容)
📌 要求:
① 限制要加密的内容长度为 30 以下,以
储存。
② 只加密 26 个字母(大小写),其余文字都不用加密。
③ 定义一个 encryption 函数,加密部分在此函数内实现。
④ 运行结果演示:(测试语句:Hello world! I'm LeiJun, Are you ok?)
💬 参考答案:
#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
❌ 勘误: 无
📜 声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!
本篇完。