密钥是从100至200中的一个素数,加密方法是每三个字母加上密钥中对应的数字,超出26个大写和小写的字母范围的减去26,空格和标点符号不加密。例如,假设密钥为139,要加密的字符串为“We are students”,第一个字母“W”加密为’W’+1=’X’,第二个字母加密后为’e’+3=’h’,第三个字母加密后为’a’+9=’j’,第四个字母加密后为’r’+1=’s’, 第五个字母加密后为’e’+3=’h’,第六个字母加密后’s’+9超过了字母范围,所以减去26得,’s’+9-26=’b’,….。用C语言凯撒密码代码实现
时间: 2023-10-27 07:07:04 浏览: 29
```c
#include <stdio.h>
#include <ctype.h>
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int key;
printf("请输入密钥(100-200之间的素数):");
scanf("%d", &key);
if (!is_prime(key) || key < 100 || key > 200) {
printf("密钥输入错误!\n");
return 0;
}
char str[100];
printf("请输入要加密的字符串:");
getchar(); // 读取上一个scanf输入后留下的回车
fgets(str, 100, stdin);
for (int i = 0; str[i] != '\0'; i++) {
if (isalpha(str[i])) { // 如果是字母
int shift = key % 26; // 计算移动的距离
if (islower(str[i])) { // 如果是小写字母
str[i] = (str[i] - 'a' + shift) % 26 + 'a'; // 移动并还原成字母
} else { // 如果是大写字母
str[i] = (str[i] - 'A' + shift) % 26 + 'A'; // 移动并还原成字母
}
}
}
printf("加密后的字符串为:%s\n", str);
return 0;
}
```