RSA算法代码#inclede<stdio.h> #include<math.h> int Prime(int _m){int i,k; if(m<2) return 0;补充剩余代码
时间: 2023-12-20 17:04:46 浏览: 28
int Prime(int _m){
int i,k;
if(m<2) return 0;
k = sqrt(m);
for(i=2;i<=k;i++){
if(m%i==0) return 0;
}
return 1;
}
// RSA加密
int RSA_Encrypt(int p,int q,int e,int m){
int n = p*q;
int fn = (p-1)*(q-1);
int i,d;
for(i=1;i<fn;i++){
if((i*e)%fn==1){
d = i;
break;
}
}
int c = pow(m,e);
c = fmod(c,n);
return c;
}
// RSA解密
int RSA_Decrypt(int p,int q,int e,int c){
int n = p*q;
int fn = (p-1)*(q-1);
int i,d;
for(i=1;i<fn;i++){
if((i*e)%fn==1){
d = i;
break;
}
}
int m = pow(c,d);
m = fmod(m,n);
return m;
}
相关问题
C语言实现RSA算法代码
以下是C语言实现RSA算法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int p, q, n, phi, e, d, plain_text, cipher_text, decrypted_text;
printf("Enter two prime numbers p and q: ");
scanf("%d %d", &p, &q);
n = p * q;
phi = (p - 1) * (q - 1);
// Select an integer e such that 1 < e < phi and gcd(e, phi) = 1.
printf("Enter the value of e such that gcd(e, phi) = 1: ");
scanf("%d", &e);
// Calculate d such that d ≡ e^(-1) (mod phi).
d = fmod(pow(e, -1), phi);
printf("Enter the plain text: ");
scanf("%d", &plain_text);
// Encryption: c = (plain_text^e) % n.
cipher_text = fmod(pow(plain_text, e), n);
printf("Cipher text: %d\n", cipher_text);
// Decryption: plain_text = (cipher_text^d) % n.
decrypted_text = fmod(pow(cipher_text, d), n);
printf("Decrypted text: %d\n", decrypted_text);
return 0;
}
```
在该示例中,用户需要输入两个素数`p`和`q`、加密指数`e`以及明文`plain_text`。程序计算出了`n`和`phi`,然后计算出了私钥`d`。使用公钥`(n, e)`对明文进行加密,使用私钥`(n, d)`对密文进行解密。
请注意,此示例仅用于演示目的,实际使用中需要考虑更多的安全性和性能方面的问题。
rsa加解密算法c语言
RSA加解密算法是一种非对称加密算法,它的安全性基于大数分解的困难性。RSA算法的加密和解密过程都需要使用到公钥和私钥,其中公钥用于加密,私钥用于解密。下面是RSA加解密算法的C语言实现:
1. 生成公钥和私钥
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define MAX_PRIME 1000000
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main() {
srand(time(NULL));
int p, q, n, phi, e, d;
do {
p = rand() % MAX_PRIME + 1;
} while (!is_prime(p));
do {
q = rand() % MAX_PRIME + 1;
} while (!is_prime(q) || p == q);
n = p * q;
phi = (p - 1) * (q - 1);
do {
e = rand() % phi + 1;
} while (gcd(e, phi) != 1);
for (int i = 1; i < phi; i++) {
if ((i * e) % phi == 1) {
d = i;
break;
}
}
printf("Public key: (%d, %d)\n", e, n);
printf("Private key: (%d, %d)\n", d, n);
return 0;
}
```
2. 加密和解密
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int mod_pow(int base, int exponent, int modulus) {
int result = 1;
while (exponent > 0) {
if (exponent % 2 == 1) {
result = (result * base) % modulus;
}
base = (base * base) % modulus;
exponent /= 2;
}
return result;
}
int main() {
int e, d, n, len;
char message[100];
printf("Enter public key (e, n): ");
scanf("%d %d", &e, &n);
printf("Enter private key (d, n): ");
scanf("%d %d", &d, &n);
printf("Enter message to encrypt: ");
scanf("%s", message);
len = strlen(message);
int encrypted[len], decrypted[len];
for (int i = 0; i < len; i++) {
encrypted[i] = mod_pow(message[i], e, n);
decrypted[i] = mod_pow(encrypted[i], d, n);
}
printf("Encrypted message: ");
for (int i = 0; i < len; i++) {
printf("%d ", encrypted[i]);
}
printf("\nDecrypted message: ");
for (int i = 0; i < len; i++) {
printf("%c", decrypted[i]);
}
printf("\n");
return 0;
}
```