rsa加密算法c语言
时间: 2023-06-21 12:09:03 浏览: 116
RSA加密算法是一种非对称加密算法,它需要两个密钥:公钥和私钥。公钥可以公开,任何人都可以使用它来加密消息。私钥则只有该密钥的持有者才能使用它来解密消息。
下面是RSA加密算法的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// 生成公钥和私钥
void rsa_keygen(int p, int q, int *n, int *e, int *d) {
int phi = (p - 1) * (q - 1);
*n = p * q;
*e = 2;
while (*e < phi) {
if (fmod(phi, *e) == 0) {
*e += 1;
continue;
}
int gcd = 0;
int i = 2;
while (gcd != 1 && i < phi) {
gcd = 1;
for (int j = 2; j <= i && j <= phi; j++) {
if (i % j == 0 && phi % j == 0) {
gcd = j;
}
}
i++;
}
if (gcd == 1 && i == *e) {
break;
}
*e += 1;
}
int k = 1;
while (1) {
if ((k * phi + 1) % *e == 0) {
*d = (k * phi + 1) / *e;
break;
}
k += 1;
}
}
// 加密
int rsa_encrypt(int m, int e, int n) {
int c = 1;
for (int i = 0; i < e; i++) {
c = (c * m) % n;
}
return c;
}
// 解密
int rsa_decrypt(int c, int d, int n) {
int m = 1;
for (int i = 0; i < d; i++) {
m = (m * c) % n;
}
return m;
}
int main() {
int p = 61, q = 53; // 选择两个质数
int n, e, d; // 定义公钥和私钥
rsa_keygen(p, q, &n, &e, &d); // 生成公钥和私钥
printf("公钥: (%d, %d)\n", e, n);
printf("私钥: (%d, %d)\n", d, n);
int m = 123; // 要加密的明文
int c = rsa_encrypt(m, e, n); // 加密
printf("密文: %d\n", c);
int m2 = rsa_decrypt(c, d, n); // 解密
printf("解密后的明文: %d\n", m2);
return 0;
}
```
注意:这只是一个简单的RSA实现,可能不够安全和完整。在实际应用中,请使用更为安全和完整的RSA算法库。
阅读全文