C语言素数凯撒密码
时间: 2023-10-18 12:04:17 浏览: 93
C语言素数问题、作业
5星 · 资源好评率100%
素数凯撒密码是一种基于素数的加密算法,可以将明文转化为密文,保证信息的安全性。具体实现步骤如下:
1. 输入明文字符串和一个素数p(例如p=7);
2. 对于字符串中的每个字符,将其转化为ASCII码,然后加上p,再对256取模,得到密文字符的ASCII码;
3. 将得到的密文字符的ASCII码转化为字符,并将其连接起来,形成密文字符串。
解密的步骤与加密的步骤相反,具体实现如下:
1. 输入密文字符串和素数p;
2. 对于字符串中的每个字符,将其转化为ASCII码,然后减去p,再对256取模,得到明文字符的ASCII码;
3. 将得到的明文字符的ASCII码转化为字符,并将其连接起来,形成明文字符串。
以下是用C语言实现的素数凯撒密码代码:
```c
#include <stdio.h>
#include <string.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;
}
void encrypt(char *s, int p) // 加密函数
{
int len = strlen(s);
for (int i = 0; i < len; i++) {
s[i] = (s[i] + p) % 256;
}
}
void decrypt(char *s, int p) // 解密函数
{
int len = strlen(s);
for (int i = 0; i < len; i++) {
s[i] = (s[i] - p + 256) % 256;
}
}
int main()
{
char str[100];
int p;
printf("请输入明文字符串:");
scanf("%s", str);
printf("请输入一个素数p:");
scanf("%d", &p);
while (!is_prime(p)) {
printf("输入的数不是素数,请重新输入:");
scanf("%d", &p);
}
encrypt(str, p);
printf("加密后的密文为:%s\n", str);
decrypt(str, p);
printf("解密后的明文为:%s\n", str);
return 0;
}
```
注意:以上代码中未进行错误处理,请自行添加。
阅读全文