用C语言写一个凯撒密码
时间: 2023-04-12 20:01:49 浏览: 112
可以使用以下代码实现凯撒密码:
```c
#include <stdio.h>
#include <string.h>
void caesar_cipher(char *str, int shift) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = 'a' + (str[i] - 'a' + shift) % 26;
} else if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = 'A' + (str[i] - 'A' + shift) % 26;
}
}
}
int main() {
char str[100];
int shift;
printf("请输入明文:");
scanf("%s", str);
printf("请输入偏移量:");
scanf("%d", &shift);
caesar_cipher(str, shift);
printf("密文为:%s\n", str);
return 0;
}
```
这段代码可以让用户输入一个字符串和一个偏移量,然后对字符串进行凯撒密码加密,并输出加密后的结果。
相关问题
如何用C语言写一个凯撒密码
凯撒密码是一种古老的加密方式,将明文中的每个字母按照一定的位移量向后(或向前)移动,得到密文。下面是用C语言实现凯撒密码的代码:
```c
#include <stdio.h>
#include <string.h>
void caesar_encrypt(char *text, int shift) {
int length = strlen(text);
for (int i = 0; i < length; i++) {
// 只对字母进行加密,忽略其他字符
if (text[i] >= 'a' && text[i] <= 'z') {
text[i] = 'a' + (text[i] - 'a' + shift) % 26;
}
else if (text[i] >= 'A' && text[i] <= 'Z') {
text[i] = 'A' + (text[i] - 'A' + shift) % 26;
}
}
}
void caesar_decrypt(char *text, int shift) {
// 解密即为加密过程的逆过程
caesar_encrypt(text, 26 - shift);
}
int main() {
char text[100];
int shift;
printf("请输入明文:\n");
fgets(text, sizeof(text), stdin);
printf("请输入位移量:\n");
scanf("%d", &shift);
caesar_encrypt(text, shift);
printf("加密后的密文为:%s\n", text);
caesar_decrypt(text, shift);
printf("解密后的明文为:%s\n", text);
return 0;
}
```
代码中的`caesar_encrypt`函数用于加密,`caesar_decrypt`函数用于解密。其中,`shift`参数表示位移量,可以是任意整数。输入明文和位移量后,程序会先对明文进行加密,然后再对密文进行解密,输出最终的明文。
用C语言写出凯撒密码代码
以下是用C语言实现凯撒密码的加密和解密功能的示例代码:
```c
#include<stdio.h>
#include<string.h>
// 凯撒密码加密函数
void caesar_encrypt(char *msg, int shift) {
int i = 0;
char ch;
while(msg[i] != '\0') {
ch = msg[i];
// 大写字母移位
if(ch >= 'A' && ch <= 'Z') {
ch = (ch + shift - 'A') % 26 + 'A';
}
// 小写字母移位
else if(ch >= 'a' && ch <= 'z') {
ch = (ch + shift - 'a') % 26 + 'a';
}
msg[i] = ch;
i++;
}
}
// 凯撒密码解密函数
void caesar_decrypt(char *msg, int shift) {
int i = 0;
char ch;
while(msg[i] != '\0') {
ch = msg[i];
// 大写字母移位
if(ch >= 'A' && ch <= 'Z') {
ch = (ch - shift - 'A' + 26) % 26 + 'A';
}
// 小写字母移位
else if(ch >= 'a' && ch <= 'z') {
ch = (ch - shift - 'a' + 26) % 26 + 'a';
}
msg[i] = ch;
i++;
}
}
int main() {
char message[100];
int shift;
printf("请输入要加密的字符串:");
scanf("%s", message);
printf("请输入要移位的位数:");
scanf("%d", &shift);
caesar_encrypt(message, shift);
printf("加密后的字符串为:%s\n", message);
caesar_decrypt(message, shift);
printf("解密后的字符串为:%s\n", message);
return 0;
}
```
在这个示例代码中,我们定义了两个函数`caesar_encrypt()`和`caesar_decrypt()`,分别用于凯撒密码的加密和解密。这两个函数都接受两个参数,第一个参数是要加密或解密的字符串,第二个参数是移位的位数。
在`caesar_encrypt()`中,我们遍历字符串中的每个字符,如果是大写字母,则将其移位后取模得到新的字符,再加上字符'A'得到新的字符;如果是小写字母,则同样进行移位操作,但是加上的是字符'a'。最后将修改后的字符串存回原来的数组中。
在`caesar_decrypt()`中,我们同样遍历字符串中的每个字符,还原出原来的字符。由于加密时是将字符加上一个位移量,所以解密时只需将字符减去这个位移量即可。注意需要处理字符超出了'A'-'Z'和'a'-'z'范围的情况。
在`main()`函数中,我们首先读入要加密的字符串和移位的位数,然后调用`caesar_encrypt()`和`caesar_decrypt()`分别进行加密和解密操作,并输出结果。
阅读全文