RSA加密解密算法代码c语言
时间: 2024-05-03 15:14:53 浏览: 126
RSA加密解密算法是一种非对称加密算法,它使用了两个密钥,即公钥和私钥。下面是一个简单的RSA加密解密算法的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 判断是否为素数
int isPrime(int num) {
if (num <= 1) {
return 0;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
// 生成公钥和私钥
void generateKeys(int p, int q, int *n, int *e, int *d) {
*n = p * q;
int phi = (p - 1) * (q - 1);
// 选择一个与phi互质的数e
for (*e = 2; *e < phi; (*e)++) {
if (gcd(*e, phi) == 1) {
break;
}
}
// 计算私钥d
for (*d = 1; *d < phi; (*d)++) {
if ((*e * (*d)) % phi == 1) {
break;
}
}
}
// 加密
int encrypt(int message, int e, int n) {
int encryptedMessage = 1;
for (int i = 0; i < e; i++) {
encryptedMessage = (encryptedMessage * message) % n;
}
return encryptedMessage;
}
// 解密
int decrypt(int encryptedMessage, int d, int n) {
int decryptedMessage = 1;
for (int i = 0; i < d; i++) {
decryptedMessage = (decryptedMessage * encryptedMessage) % n;
}
return decryptedMessage;
}
int main() {
int p, q, n, e, d;
int message, encryptedMessage, decryptedMessage;
printf("请输入两个素数p和q:");
scanf("%d %d", &p, &q);
if (!isPrime(p) || !isPrime(q)) {
printf("输入的p和q必须为素数!\n");
return 0;
}
generateKeys(p, q, &n, &e, &d);
printf("生成的公钥为:%d\n", e);
printf("生成的私钥为:%d\n", d);
printf("请输入要加密的消息:");
scanf("%d", &message);
encryptedMessage = encrypt(message, e, n);
printf("加密后的消息为:%d\n", encryptedMessage);
decryptedMessage = decrypt(encryptedMessage, d, n);
printf("解密后的消息为:%d\n", decryptedMessage);
return 0;
}
```
这段代码实现了RSA加密解密算法,包括生成公钥和私钥、加密和解密过程。你可以根据需要进行修改和扩展。
阅读全文