用c语言写一个rsa密码算法
时间: 2024-05-07 15:20:18 浏览: 11
您好!下面是一个基于C语言的RSA加密算法的代码示例:
```
#include <stdio.h>
#include <math.h>
#include <string.h>
int p, q, n, t, flag, e[100], d[100], temp[100], j, m[100], en[100];
char msg[100];
int prime(int);
void ce();
long int cd(long int);
void encrypt();
void decrypt();
int main() {
printf("Enter first prime number: ");
scanf("%d", &p);
flag = prime(p);
if (flag == 0) {
printf("Wrong input.\n");
return 0;
}
printf("Enter second prime number: ");
scanf("%d", &q);
flag = prime(q);
if (flag == 0 || p == q) {
printf("Wrong input.\n");
return 0;
}
printf("Enter message: ");
scanf("%s", msg);
for (i = 0; msg[i] != '\0'; i++)
m[i] = msg[i];
n = p * q;
t = (p - 1) * (q - 1);
ce();
printf("\nPossible values of e and d are: \n");
for (i = 0; i < j - 1; i++)
printf("%d\t%d\n", e[i], d[i]);
encrypt();
decrypt();
return 0;
}
int prime(int pr) {
int i;
j = sqrt(pr);
for (i = 2; i <= j; i++) {
if (pr % i == 0)
return 0;
}
return 1;
}
void ce() {
int k;
k = 0;
for (i = 2; i < t; i++) {
if (t % i == 0)
continue;
flag = prime(i);
if (flag == 1 && i != p && i != q) {
e[k] = i;
flag = cd(e[k]);
if (flag > 0) {
d[k] = flag;
k++;
}
if (k == 99)
break;
}
}
}
long int cd(long int x) {
long int k = 1;
while (1) {
k = k + t;
if (k % x == 0)
return (k / x);
}
}
void encrypt() {
long int pt, ct, key = e[0], k, len;
i = 0;
len = strlen(msg);
while (i != len) {
pt = m[i];
pt = pt - 96;
k = 1;
for (j = 0; j < key; j++) {
k =