在 C 语言中实现凯撒密码
本文将演示关于如何在 C 语言中实现凯撒密码的多种方法。
在 C 语言中实现凯撒密码处理常量字符串的方法
凯撒密码是一种最简单的加密方案,不能用于任何产品级的保密,而只是满足我们知识上的好奇心。凯撒本质上是具有给定位置数量的字母旋转技术。给定文本和位置 5,加密版本将包含右移 5 位的字符。请注意,旋转方向不是严格指定的,因为每种情况下都有其相反的旋转,从而得到相同的结果。
在下面的例子中,我们演示了如何加密硬编码的 string
文字。旋转位置取自用户输入,并检查数字是否在 [1,26]的区间内,因为这个例子只针对英文字母。接下来,我们执行 while
循环,在这个循环中,一个字符被检查是否有非字母值,然后才用给定的位置进行移位。这段代码只能处理小写字母,因为我们采用了代表 ASCII 编码中 a
的 97
值。同时,我们直接将编码后的值逐个字符输出到控制台。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
const char *str = "arbitrary string to encode";
int main(void) {
int shift;
char num[16];
printf("Choose shift number [1-26]: ");
fflush(stdout);
if (fgets(num, 16, stdin) == NULL)
exit(EXIT_FAILURE);
shift = (int) strtol(num, NULL, 0);
if (shift < 1 || shift > 26) {
fprintf(stderr, "Shift number is out of range");
exit(EXIT_FAILURE);
}
while (*str) {
if (!isspace(*str) || !isblank(*str))
printf("%c", (((*str - 97) + shift) % 26) + 97);
else
printf("%c", *str);
str += 1;
}
exit(EXIT_SUCCESS);
}
在 C 语言中实现凯撒密码来处理用户提供的字符串
另外,我们也可以重新实现之前的代码示例,从用户输入的文本和旋转位置中获取文本和旋转位置,验证它们,并对给定的字符串进行加密。与前一个例子相比,这个版本包括两个 fgets
调用和 malloc
来为明文分配动态内存。这个实现还处理了小写的字符串,将无法正确加密混合字符串。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
enum {MAX_LEN = 1024};
int main(void) {
size_t len;
int shift;
char *text;
char num[16];
text = malloc(MAX_LEN);
if (text == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
printf("Input text to be encrypted (lowercase): ");
fflush(stdout);
if (fgets(text, MAX_LEN, stdin) == NULL)
exit(EXIT_FAILURE);
len = strlen(text);
if (text[len - 1] == '\n')
text[len - 1] = '\0';
len -= 1;
printf("Choose shift number [1-26]: ");
fflush(stdout);
if (fgets(num, 16, stdin) == NULL)
exit(EXIT_FAILURE);
shift = (int) strtol(num, NULL, 0);
if (shift < 1 || shift > 26) {
fprintf(stderr, "Shift number is out of range");
exit(EXIT_FAILURE);
}
for (int i = 0; i < len; ++i) {
if (!isspace(text[i]) || !isblank(text[i]))
printf("%c", (((text[i] - 97)+shift)%26)+97);
else
printf("%c", text[i]);
}
exit(EXIT_SUCCESS);
}
相关文章
JavaScript 中的凯撒密码
发布时间:2024/03/19 浏览次数:165 分类:JavaScript
-
在本文中,我们将通过不同的示例了解 JavaScript 中的凯撒密码是什么,以及此功能在 JavaScript 源代码中的用途和好处是什么。
在C中将整数转换为字符
发布时间:2024/01/03 浏览次数:131 分类:C语言
-
本教程介绍了在C中将整数转换为字符的不同方法。在C编程语言中,将整数转换为字符在各种情况下都很重要。在C中,字符是以ASCII值表示的,因此转换过程相对简单。
Java 中的凯撒密码加密
发布时间:2023/10/10 浏览次数:235 分类:Java
-
本教程演示如何在 Java 中使用 Caesar Cipher 执行加密和解密。凯撒密码是执行加密的最简单方法之一。本教程演示如何在 Java 中使用 Caesar Cipher 执行加密和解密。
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:364 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。