用c语言写一个rsa密码算法的代码
时间: 2024-02-11 19:09:44 浏览: 103
RSA密码算法是一种非对称加密算法,它包含三个主要步骤:密钥生成、加密和解密。下面是一个用C语言实现RSA密码算法的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// 求最大公因数
int gcd(int a, int b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
// 求模反元素
int mod_inverse(int a, int m) {
int m0 = m, t, q;
int x0 = 0, x1 = 1;
if (m == 1)
return 0;
while (a > 1) {
q = a / m;
t = m;
m = a % m, a = t;
t = x0;
x0 = x1 - q * x0;
x1 = t;
}
if (x1 < 0)
x1 += m0;
return x1;
}
// 生成公钥和私钥
void generate_key(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 (gcd(*e, phi) == 1)
break;
else
*e += 1;
}
*d = mod_inverse(*e, phi);
}
// 加密
int encrypt(int msg, int e, int n) {
int c = pow(msg, e);
c = c % n;
return c;
}
// 解密
int decrypt(int c, int d, int n) {
int msg = pow(c, d);
msg = msg % n;
return msg;
}
int main() {
int p, q, n, e, d, msg, c, dec;
printf("Enter two prime numbers: ");
scanf("%d %d", &p, &q);
generate_key(p, q, &n, &e, &d);
printf("Public key: (%d, %d)\n", n, e);
printf("Private key: (%d, %d)\n", n, d);
printf("Enter a message to encrypt: ");
scanf("%d", &msg);
c = encrypt(msg, e, n);
printf("Encrypted message: %d\n", c);
dec = decrypt(c, d, n);
printf("Decrypted message: %d\n", dec);
return 0;
}
```
在这个代码中,我们首先实现了求最大公因数和求模反元素的函数。这两个函数是RSA算法的关键部分。接着,我们实现了生成公钥和私钥的函数,这个函数利用两个质数p和q来生成公钥和私钥。最后,我们实现了加密和解密的函数,这两个函数分别用公钥和私钥来加密和解密数据。
在主函数中,我们首先要求用户输入两个质数p和q,然后利用它们来生成公钥和私钥。接着,我们要求用户输入要加密的数据,然后用公钥来对数据进行加密。最后,我们用私钥来解密数据,并将结果输出到屏幕上。
阅读全文