c语言rsa算法代码
时间: 2023-11-11 17:00:48 浏览: 123
RSA算法是一种非对称加密算法,用于实现数据的加密和解密。它是以三位数的质数p和q为基础,通过公钥和私钥的配对来进行加密和解密操作。
具体的C语言RSA算法代码如下所示:
```c
#include <stdio.h>
#include <math.h>
// 求两个数的最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 判断是否为质数
int isPrime(int n) {
int i;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 生成公钥和私钥
void generateKeys(int p, int q, int *e, int *d, int *n) {
int phi = (p - 1) * (q - 1);
int i;
// 找到一个与phi互质的数e
for (i = 2; i < phi; i++) {
if (gcd(i, phi) == 1) {
*e = i;
break;
}
}
// 计算私钥d,满足d * e ≡ 1 (mod phi)
for (i = 1; i <= phi; i++) {
if ((i * *e) % phi == 1) {
*d = i;
break;
}
}
*n = p * q;
}
// 加密函数
int encrypt(int msg, int e, int n) {
int c = 1;
int i;
for (i = 0; i < e; i++) {
c = (c * msg) % n;
}
return c;
}
// 解密函数
int decrypt(int c, int d, int n) {
int m = 1;
int i;
for (i = 0; i < d; i++) {
m = (m * c) % n;
}
return m;
}
int main() {
int p, q, e, d, n;
int msg, encryptedMsg, decryptedMsg;
printf("请输入两个质数p和q:\n");
scanf("%d %d", &p, &q);
if (!isPrime(p) || !isPrime(q)) {
printf("输入的不是质数!\n");
return 0;
}
generateKeys(p, q, &e, &d, &n);
printf("请输入要加密的消息:\n");
scanf("%d", &msg);
encryptedMsg = encrypt(msg, e, n);
decryptedMsg = decrypt(encryptedMsg, d, n);
printf("加密后的消息为:%d\n", encryptedMsg);
printf("解密后的消息为:%d\n", decryptedMsg);
return 0;
}
```
以上是一个基本的C语言实现的RSA算法。通过输入两个质数p和q来生成公钥和私钥,然后再通过输入要加密的消息进行加密和解密操作,并输出加密后和解密后的消息。
注意,这只是一个简化的实现示例,实际的RSA算法涉及到更多的数学运算和安全性考虑。
阅读全文