rsa算法加密解密c语言
时间: 2024-06-21 19:03:47 浏览: 145
RSA算法是一种非对称加密算法,它的加密和解密使用的是不同的密钥,其中公钥用于加密,私钥用于解密。RSA算法是目前应用最广泛的公钥加密算法之一。
RSA算法的加密过程如下:
1. 首先选择两个质数p和q,并计算它们的乘积n=p*q;
2. 选择一个整数e,使得e与(p-1)*(q-1)互质;
3. 计算d,使得d*e ≡ 1 (mod (p-1)*(q-1));
4. 将n和e作为公钥,n和d作为私钥;
5. 要加密明文m,计算c ≡ m^e (mod n),得到密文c。
RSA算法的解密过程如下:
1. 使用私钥(n,d)解密密文c,得到明文m ≡ c^d (mod n)。
下面是RSA算法的加解密示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// 计算a^b mod n
int mod_pow(int a, int b, int n)
{
int result = 1;
a = a % n;
while (b > 0) {
if (b & 1) {
result = (result * a) % n;
}
b >>= 1;
a = (a * a) % n;
}
return result;
}
// 求最大公约数
int gcd(int a, int b)
{
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 计算d*e ≡ 1 (mod (p-1)*(q-1))
int calc_d(int e, int p, int q)
{
int fn = (p - 1) * (q - 1);
int d = 0;
while (1) {
d++;
if ((d * e) % fn == 1) {
break;
}
}
return d;
}
// 加密
int encrypt(int m, int e, int n)
{
return mod_pow(m, e, n);
}
// 解密
int decrypt(int c, int d, int n)
{
return mod_pow(c, d, n);
}
int main()
{
int p = 61, q = 53; // 选择两个质数p和q
int n = p * q; // 计算n
int fn = (p - 1) * (q - 1); // 计算(p-1)*(q-1)
int e = 17; // 选择e,使得e与fn互质
int d = calc_d(e, p, q); // 计算d
printf("公钥:(%d,%d)\n", n, e);
printf("私钥:(%d,%d)\n", n, d);
// 加密明文m
int m = 12345;
int c = encrypt(m, e, n);
printf("明文:%d,密文:%d\n", m, c);
// 解密密文c
int dm = decrypt(c, d, n);
printf("解密密文:%d\n", dm);
return 0;
}
```
阅读全文