用c语言编写RSA算法
时间: 2024-03-09 19:02:14 浏览: 72
RSA算法是一种非常复杂的加密算法,涉及到大量的数学计算和理论知识,因此用C语言编写RSA算法需要一定的数学和编程基础。以下是一个简单的示例代码,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#define MAX 1000
int gcd(int a, int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int is_prime(int n)
{
if (n <= 1)
return 0;
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
int generate_prime(int min, int max)
{
int p;
do
{
p = (rand() % (max - min + 1)) + min;
} while (!is_prime(p));
return p;
}
int main()
{
srand(time(NULL));
int p = generate_prime(100, 1000);
int q = generate_prime(100, 1000);
int n = p * q;
int phi = (p - 1) * (q - 1);
int e;
do
{
e = (rand() % (phi - 2)) + 2;
} while (gcd(e, phi) != 1);
int d = 1;
while ((d * e) % phi != 1)
d++;
printf("Public key: (%d, %d)\n", e, n);
printf("Private key: (%d, %d)\n", d, n);
char message[MAX];
printf("Enter message to encrypt: ");
fgets(message, MAX, stdin);
message[strcspn(message, "\n")] = 0;
int len = strlen(message);
int encrypted[len];
int decrypted[len];
for (int i = 0; i < len; i++)
{
int m = message[i];
int c = fmod(pow(m, e), n);
encrypted[i] = c;
decrypted[i] = fmod(pow(c, d), n);
}
printf("Encrypted message: ");
for (int i = 0; i < len; i++)
printf("%d ", encrypted[i]);
printf("\n");
printf("Decrypted message: ");
for (int i = 0; i < len; i++)
printf("%c", decrypted[i]);
printf("\n");
return 0;
}
```
这个示例代码实现了RSA算法的基本功能,包括生成公钥和私钥、加密和解密消息。当然,这个代码还有很多可以改进的地方,比如输入输出格式、错误处理等等,但是这已经足够让你了解RSA算法的基本实现方法了。
阅读全文