rsa加密算法c语言实现
时间: 2023-07-13 17:11:41 浏览: 196
RSA加密算法的C语言实现
5星 · 资源好评率100%
RSA加密算法是一种非对称加密算法,其实现需要用到大数运算和模运算。以下是一个简单的C语言实现RSA加密算法的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
// 生成指定位数的素数
int generatePrime(int bit) {
srand((unsigned int)time(NULL));
int prime = rand() % (int)pow(10, bit) + (int)pow(10, bit - 1);
while (1) {
int flag = 0;
for (int i = 2; i <= sqrt(prime); i++) {
if (prime % i == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
return prime;
}
prime++;
}
}
// 计算模反元素
int modInverse(int a, int m) {
int x, y, r, q, t1, t2;
x = 0;
y = 1;
r = m;
while (a != 0) {
q = r / a;
t1 = x - q * y;
t2 = r - q * a;
x = y;
y = t1;
r = a;
a = t2;
}
if (r > 1) {
return -1;
}
if (x < 0) {
x += m;
}
return x;
}
// 加密
int encrypt(int m, int e, int n) {
int c = 1;
for (int i = 0; i < e; i++) {
c = (c * m) % n;
}
return c;
}
// 解密
int 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, q, n, e, d, m, c;
// 生成两个素数p和q
p = generatePrime(3);
q = generatePrime(3);
while (p == q) {
q = generatePrime(3);
}
// 计算n和phi(n)
n = p * q;
int phi = (p - 1) * (q - 1);
// 选择e,使得1 < e < phi(n)且e与phi(n)互质
e = rand() % (phi - 1) + 1;
while (1) {
int flag = 1;
for (int i = 2; i <= sqrt(e); i++) {
if (e % i == 0 && phi % i == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
break;
}
e++;
}
// 计算d
d = modInverse(e, phi);
printf("p = %d, q = %d, n = %d, phi(n) = %d, e = %d, d = %d\n", p, q, n, phi, e, d);
// 加密
printf("请输入要加密的整数m:\n");
scanf("%d", &m);
c = encrypt(m, e, n);
printf("加密后的密文为:%d\n", c);
// 解密
printf("请输入要解密的密文c:\n");
scanf("%d", &c);
m = decrypt(c, d, n);
printf("解密后的明文为:%d\n", m);
return 0;
}
```
该代码中包括了生成素数、计算模反元素、加密和解密等函数,可以在命令行中运行并进行测试。需要注意的是,该代码的加密和解密操作只支持整数类型的数据。
阅读全文