c实现用RSA加密一段文字
时间: 2024-05-12 16:15:11 浏览: 139
RSA加密算法的C语言实现
5星 · 资源好评率100%
下面是一个简单的用 C 语言实现 RSA 加密的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_SIZE 1024 // 最大明文长度
/* 快速幂算法 */
long long fast_power(long long base, long long exponent, long long mod) {
long long result = 1;
while (exponent > 0) {
if (exponent % 2 == 1) {
result = (result * base) % mod;
}
base = (base * base) % mod;
exponent /= 2;
}
return result;
}
/* 判断是否为素数 */
int is_prime(long long n) {
if (n <= 1) {
return 0;
}
if (n == 2) {
return 1;
}
if (n % 2 == 0) {
return 0;
}
long long i;
for (i = 3; i <= sqrt(n); i += 2) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
/* 生成公钥和私钥 */
void generate_key(long long p, long long q, long long *n, long long *e, long long *d) {
*n = p * q;
long long phi = (p - 1) * (q - 1);
*e = 2;
while (phi % *e == 0 || is_prime(*e) == 0) {
(*e)++;
}
long long k = 1;
while ((k * phi + 1) % *e != 0) {
k++;
}
*d = (k * phi + 1) / *e;
}
/* 加密明文 */
void encrypt(char *plaintext, long long n, long long e, char *ciphertext) {
while (*plaintext != '\0') {
long long m = *plaintext;
long long c = fast_power(m, e, n);
sprintf(ciphertext, "%s%lld ", ciphertext, c);
plaintext++;
}
}
int main() {
long long p = 17; // 素数 p
long long q = 19; // 素数 q
long long n, e, d;
generate_key(p, q, &n, &e, &d);
printf("公钥: (%lld, %lld)\n", n, e);
printf("私钥: (%lld, %lld)\n", n, d);
char plaintext[MAX_SIZE];
printf("请输入明文: ");
fgets(plaintext, MAX_SIZE, stdin);
plaintext[strlen(plaintext) - 1] = '\0'; // 去除最后一个换行符
char ciphertext[MAX_SIZE];
ciphertext[0] = '\0';
encrypt(plaintext, n, e, ciphertext);
printf("密文: %s\n", ciphertext);
return 0;
}
```
在该示例中,我们实现了 RSA 加密算法的基本功能,包括:
- 快速幂算法
- 判断素数
- 生成公钥和私钥
- 加密明文
在生成公钥和私钥时,我们采用了欧拉定理和扩展欧几里得算法来计算。在加密明文时,我们采用了将明文转化为 ASCII 码后进行加密的方式,并将加密后的密文以空格分隔的形式输出。在实际应用中,我们可以采用其他更为复杂的方式来进行加密和解密。
阅读全文