C语言实现字母循环左移加密并逆序存储
C语言实现字母循环左移加密并逆序存储
本文提供一段使用C语言编写的程序,可以在CodeBlocks环境中运行,实现对明文字符串的加密操作。加密过程包括两个步骤:
- 字母循环左移: 明文字符串中所有的字母都按字母表顺序被循环左移了三个位置('deac' -> 'abxz'),其他非字母的字符不变。
- 逆序存储: 加密后的字符串进行逆序存储('abxz' -> 'zxba')。
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_LENGTH 80
int main() {
char plaintext[MAX_LENGTH];
char ciphertext[MAX_LENGTH];
int length;
printf('请输入明文字符串(含空格):\n');
fgets(plaintext, sizeof(plaintext), stdin);
length = strlen(plaintext);
// 加密操作:按字母表顺序循环左移三个位置
for (int i = 0; i < length; i++) {
if (isalpha(plaintext[i])) {
if (islower(plaintext[i])) {
ciphertext[i] = 'a' + (plaintext[i] - 'a' + 3) % 26;
} else {
ciphertext[i] = 'A' + (plaintext[i] - 'A' + 3) % 26;
}
} else {
ciphertext[i] = plaintext[i];
}
}
// 逆序存储
for (int i = 0; i < length / 2; i++) {
char temp = ciphertext[i];
ciphertext[i] = ciphertext[length - 1 - i];
ciphertext[length - 1 - i] = temp;
}
printf('加密后的密文字符串为:\n%s\n', ciphertext);
return 0;
}
程序说明:
- 定义变量: 程序首先定义了两个字符数组,
plaintext用于存储输入的明文字符串,ciphertext用于存储加密后的密文字符串,并定义了length变量存储字符串的长度。 - 获取输入: 程序通过
fgets函数获取输入的明文字符串,并计算其长度。 - 加密操作: 循环遍历明文字符串的每个字符,判断是否为字母。如果是字母,根据其大小写进行循环左移三个位置的加密操作;如果不是字母,则直接复制到密文字符串中。
- 逆序存储: 使用双指针法,将密文字符串的左右两端字符交换,实现逆序存储。
- 输出密文: 最后,程序输出加密后的密文字符串。
使用方法:
- 将代码保存为
.c文件(例如:encryption.c)。 - 在CodeBlocks中打开该文件,并编译运行。
- 在程序提示输入明文字符串后,输入您的明文,程序将输出加密后的密文字符串。
示例:
输入:
Hello! Ace 30
输出:
03 bzX !liibE
代码解析:
isalpha(plaintext[i]):判断字符是否为字母。islower(plaintext[i]):判断字符是否为小写字母。(plaintext[i] - 'a' + 3) % 26:对小写字母进行循环左移三个位置的加密操作。(plaintext[i] - 'A' + 3) % 26:对大写字母进行循环左移三个位置的加密操作。ciphertext[i] = ciphertext[length - 1 - i]:交换密文字符串的左右两端字符。
通过这段C语言代码,您可以轻松实现对明文字符串的加密操作,并理解其背后的原理。您可以根据需要修改代码中的参数,例如循环左移的位数,来实现不同的加密效果。
原文地址: https://www.cveoy.top/t/topic/JQQ 著作权归作者所有。请勿转载和采集!