(完整版)RSA算法C语言代码
RSA加密算法_源代码__C语言实现

RSA算法
1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。
RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
} b--; //c=a * c % n; //这里也会溢出,若把64位整数拆为两个32位整数不知是否可以解决这个问题。
c=MulMod(a, c, n);
} return c;
}/*
Rabin-Miller素数测试,通过测试返回1,否则返回0。
n是待测素数。
注意:通过测试并不一定就是素数,非素数通过测试的概率是1/4
5,
7,
11,
13,
17,
19,
23,
29,
RSA加密算法(C语言实现)

RSA加密算法(C语言实现)RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,它是目前应用最广泛的加密算法之一、RSA算法基于两个大素数之间的乘积很难分解的特性,并使用公钥和私钥进行加密和解密。
在C语言中实现RSA算法需要进行以下步骤:1.生成大素数p和q:选择两个大素数p和q,它们需要满足p≠q。
这样选取p和q是为了使得计算n=p*q变得困难,保护私钥。
2.计算n:计算n=p*q,n即为公钥和私钥的参数之一3.计算欧拉函数φ(n):计算欧拉函数φ(n)=(p-1)*(q-1)。
4.选择e:选择一个与φ(n)互质且小于φ(n)的整数e作为加密指数,e即为公钥的参数。
5. 计算d:计算d = e^(-1) mod φ(n),d即为私钥的参数。
可以使用扩展欧几里得算法来计算d。
6. 加密:将明文M转换为整数m,加密后的密文C = m^e mod n。
7. 解密:解密密文C得到明文M = C^d mod n。
以下是C语言实现RSA加密算法的代码示例:```c#include <stdio.h>int gcd(int a, int b)if(b == 0)}return gcd(b, a % b);int extendedGcd(int a, int b, int *x, int *y) if(a == 0)*x=0;*y=1;return b;}int x1, y1;int gcd = extendedGcd(b % a, a, &x1, &y1);*x=y1-(b/a)*x1;*y=x1;return gcd;int modInverse(int a, int m)int x, y;int gcd = extendedGcd(a, m, &x, &y);if(gcd != 1)printf("Inverse doesn't exist\n");}return (x % m + m) % m;int powerMod(int x, unsigned int y, int m) if (y == 0)return 1;}int p = powerMod(x, y/2, m) % m;p=(p*p)%m;return (y%2 == 0) ? p : (x*p) % m;int maiint p, q, n, phiN, e, d;//选择两个大素数p和qp=31;q=17;//计算n和φ(n)n=p*q;phiN = (p - 1) * (q - 1);//选择加密指数ee=7;//计算解密指数dd = modInverse(e, phiN);int plaintext = 88;int ciphertext = powerMod(plaintext, e, n);int decryptedtext = powerMod(ciphertext, d, n);printf("Plaintext: %d\n", plaintext);printf("Ciphertext: %d\n", ciphertext);printf("Decryptedtext: %d\n", decryptedtext);return 0;```在上面的代码中,我们使用了几个辅助函数来实现扩展欧几里得算法、计算模反元素和快速幂算法。
C语言实现RSA算法

C语言实现RSA算法RSA算法是一种非对称加密算法,用于在网络通信中进行数据加密和解密。
下面我将给出C语言中RSA算法的实现。
首先,我们需要生成RSA密钥对,包括公钥和私钥。
以下是生成RSA 密钥对的C代码实现:```c#include <stdio.h>#include <stdlib.h>#include <math.h>//定义最大素数范围//定义RSA密钥结构体typedef structunsigned long long e; // 公钥指数unsigned long long d; // 私钥指数unsigned long long n; // 模数} RSAKey;//判断一个数是否为素数int isPrime(unsigned long long num)//小于等于1的数不是素数if (num <= 1) return 0;//判断是否存在因子for (unsigned long long i = 2; i <= sqrt(num); i++)if (num % i == 0)return 0;}}return 1;//生成一个指定范围内的随机素数unsigned long long generateRandomPrime(unsigned long long min, unsigned long long max)unsigned long long num;donum = rand( % (max - min + 1) + min;} while (!isPrime(num));return num;//求最大公约数unsigned long long gcd(unsigned long long a, unsigned long long b)unsigned long long temp;while (b != 0)temp = a % b;a=b;b = temp;}return a;//求模反元素unsigned long long modReverse(unsigned long long a, unsigned long long b)unsigned long long m0 = b, t, q;unsigned long long x0 = 0, x1 = 1;if (b == 1) return 0;while (a > 1)q=a/b;t=b;b=a%b;a=t;t=x0;x0=x1-q*x0;x1=t;}if (x1 < 0) x1 += m0;return x1;//生成RSA密钥对RSAKey generateRSAKeys(unsigned long long p, unsigned long long q)RSAKey keys;//计算模数keys.n = p * q;//计算欧拉函数值unsigned long long phi = (p - 1) * (q - 1);//选择公钥指数ekeys.e = generateRandomPrime(2, phi - 1);//计算私钥指数dkeys.d = modReverse(keys.e, phi);return keys;int mai//设置随机种子//生成两个不同的随机素数unsigned long long p = generateRandomPrime(2,MAX_PRIME_NUMBER);unsigned long long q = generateRandomPrime(2,MAX_PRIME_NUMBER);RSAKey keys = generateRSAKeys(p, q);printf("公钥指数e: %llu\n", keys.e);printf("私钥指数d: %llu\n", keys.d);printf("模数n: %llu\n", keys.n);return 0;```运行上述代码,即可生成RSA密钥对。
rsa加密解密算法c语言程序

rsa加密解密算法c语言程序RSA加密解密算法是一种公钥加密算法,发明于1977年,基于两个大质数的乘积难分解性,能够对短文本进行加解密。
以下是RSA加密解密算法的C语言程序。
一、密钥生成首先定义了一个结构体存储RSA密钥,该结构体包含三个元素:n、e和d。
- n = p * q,其中p和q为大质数;- e为与(p - 1) * (q - 1)互质的自然数,一般选取65537;- d为e模(p - 1) * (q - 1)的逆元素,即满足e * d ≡ 1 (mod (p - 1) * (q - 1)))的自然数。
generateRSAKey函数通过调用randomPrime函数生成两个大质数p和q,再通过Euclidean函数计算(p - 1) * (q - 1)的值phi,最后继续使用extendedEuclidean函数计算d的值,最终将生成的密钥存储在RSAKey结构体中。
```c#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>#define k 1024 // 密钥长度typedef struct {unsigned long long n;unsigned long long e;unsigned long long d;} RSAKey;unsigned long long randomPrime(unsigned long long n);unsigned long long gcd(unsigned long long a, unsigned long long b);unsigned long long Euclidean(unsigned long long a, unsigned long long b);RSAKey generateRSAKey();// 生成一个小于n的随机质数unsigned long long randomPrime(unsigned long long n) {unsigned long long p;do {p = rand() % n;while (!(p & 1)) // 确保p为奇数p = rand() % n;} while (gcd(p, n) != 1); // 确保p和n互质return p;}二、加密和解密下面定义了两个函数:encrypt和decrypt,其中encrypt函数用于将明文转换为密文,decrypt函数用于将密文转换为明文。
RSA的C语言算法实现

RSA的C语言算法实现RSA算法是一种非对称密码算法,用于加密和解密数据。
它是由三位数学家Rivest、Shamir和Adleman在1977年提出的,是目前最广泛使用的公钥加密算法之一RSA算法的实现需要以下步骤:1.选择两个大素数p和q,计算它们的乘积n=p*q。
n称为模数。
2.计算欧拉函数φ(n)=(p-1)*(q-1)。
3. 选择一个小于φ(n)的整数e,使得e与φ(n)互质,即gcd(e,φ(n)) = 1、e称为公钥指数。
4. 计算私钥指数d,满足(d * e) mod φ(n) = 1、d称为私钥指数。
5.公钥是(n,e),私钥是(n,d)。
6. 要加密消息m,计算c = m^e mod n,其中c是密文。
7. 要解密密文c,计算m = c^d mod n,其中m是原始消息。
下面是一个使用C语言实现RSA算法的示例:```c#include <stdio.h>#include <stdlib.h>typedef unsigned long long int ullong;ullong gcd(ullong a, ullong b)ullong temp;while (b != 0)temp = b;b=a%b;a = temp;}return a;ullong mod_inverse(ullong a, ullong m) ullong m0 = m;ullong y = 0, x = 1;if (m == 1)return 0;while (a > 1)ullong q = a / m;ullong t = m;m=a%m,a=t;t=y;y=x-q*y;x=t;}if (x < 0)x+=m0;return x;ullong mod_exp(ullong base, ullong exponent, ullong modulus) ullong result = 1;base = base % modulus;while (exponent > 0)if (exponent % 2 == 1)result = (result * base) % modulus;exponent = exponent >> 1;base = (base * base) % modulus;}return result;int mai//选择素数p和qullong p = 17;ullong q = 19;//计算模数n和欧拉函数φ(n)ullong n = p * q;ullong phi_n = (p - 1) * (q - 1);//选择公钥指数eullong e = 5;//计算私钥指数dullong d = mod_inverse(e, phi_n);//打印公钥和私钥printf("公钥: (%llu, %llu)\n", n, e); printf("私钥: (%llu, %llu)\n", n, d);//要加密的消息ullong m = 88;//加密消息ullong c = mod_exp(m, e, n);//打印加密结果printf("加密结果: %llu\n", c);//解密消息ullong decrypted_m = mod_exp(c, d, n); //打印解密结果printf("解密结果: %llu\n", decrypted_m);return 0;```这是一个简单的RSA实现示例,用于加密和解密一个整数。
rsa算法c语言实现,(完整版)RSA算法C语言代码

rsa算法c语⾔实现,(完整版)RSA算法C语⾔代码《(完整版)RSA算法C语⾔代码》由会员分享,可在线阅读,更多相关《(完整版)RSA算法C语⾔代码(5页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、include #include #include #include #include char s100,*c; int n,e,d,i,C,j,k=0,len; int str100,b30; unsigned gcd(unsigned a, unsigned b ) if(a%b=0) return b; else return gcd(b,a%b); void Egcd(int a, int b,int y=0; return ; if(ab) Egcd(a,b%a,x,y); x=(int) (b*y+1)/a; else Egcd(a%b,b,x,y); y=(int)(a*x-1)。
2、/b; void RSA() int p,q,N,Y; printf(请输⼊素数p和q:); scanf(%d %d, n=p*q; N=(p-1)*(q-1); 初始化随机数 产⽣随机整数e, e与N互质 /printf(n=%d N=%dn,n,N); srand( (unsigned)time( NULL ) );/ while(1) / e=rand()%N; / printf(e=%dn,e); if(e=0) continue;if(gcd(N,e)=1) break; /printf(e=%dn,e); Egcd(e,N,d,Y); / printf(d=%d Y=%dn,d,。
3、Y); printf( 公钥 PU=e=%d,n=%dn,e,n); printf( 私钥 PR=d=%d,n=%dn,d,n); void encrypt() /加密函数 len=strlen(s);/hgprintf(len=%dn,len); for(i=0;ilen;i+) /去掉 s100 中的空格 if(si122) bk=i; k+; for(j=i;jlen-1;j+) sj=sj+1; len-; slen=0; /结束符printf( 密⽂是: ); for(i=0;ilen;i+) C=1; /printf(shiji=%dn,si-97); for(int j=0;。
RSA加密算法(C语言实现)

RSA加密算法(C语⾔实现)这次轮到RSA加密算法了。
RSA加密过程相对DES和MD5要简单很多,但作为现在还在使⽤的加密算法之⼀,它还是有需要认真思索的地⽅哒~⾸先是密钥对的⽣成:(1)选取两个⼤素数p和q(⽬前两个数的长度都接近512bit是安全的)(2)计算乘积n=p*q,Φ(n)=(p-1)(q-1),其中Φ(n)为n的欧拉函数(因为两素数乘积的欧拉函数等于两数分别减⼀后的乘积)(3)随机选取整数e(1<e<Φ(n))作为公钥d,要求满⾜e与Φ(n)的最⼤公约数为1,即两者互素(4)⽤Euclid扩展算法计算私钥d,已满⾜d * e ≡ 1 (mod Φ(n)),即d ≡ e^(-1) (mod Φ(n))。
则e与n是公钥,d是私钥注意:e与n应公开,两个素数p和q不再需要,可销毁,但绝不可泄露。
加密过程:将接收到的明⽂转换成特定的编码⽅式。
如p=43,q=59,e=13,明⽂为cybergreatwall,按照英⽂字母表的顺序a=00,b=01,... ,z=25进⾏编码后为022401041706001922001111。
然后将转码后的字符串分块,分组要求:每个分组对应的⼗进制数⼩于0。
这个要求是什么意思呢?我个⼈的理解通过举例向⼤家说明:上⽂字符串分组如下0224 0104 1706 0019 2200 1111。
每⼀分组的数都⼩于n(2537),⽽2537能接受的最⼤的数为2525(也就是‘zz’的情况),所以是4位1组,即两字符⼀组。
这样⼀来,m1=0224,m2=0104,... ,m6=1111现在可以加密了~~加密算法就是这个式⼦----ci ≡ mi^e (mod n),如第⼀分组 0224^13 ≡ mod 2537 ≡ 1692=c1。
这⾥有个隐藏的算法是需要了解的:在RSA算法过程中容易出现天⽂数字(像上⽂的0224^13),⽽这些天⽂数字会为我们编程的过程造成⼀定的⿇烦,更可恶的是会影响速度!!为了避免这种情况,快速取模指数算法可以很有效地算出c≡m^e mod n的准确结果且避免过程中出现天⽂数字~~下⾯⽤伪代码为⼤家介绍下这种神奇的算法(个⼈感觉伪代码⾥的 ‘<-’ 就是平时⽤的 ‘=’ ):t<-0;c<-1for i<-k downto 0do t<-2*tc<-(c*c)mod nif bi=1 then t<-t+1c<-(c*m)mod nreturn c(p.s:e的⼆进制表⽰为bk bk-1 ... b0,如e=13=(1101),所以k为3)所以,⽤快速取模指数算法计算上⽂例⼦⾥的c1过程就该是这样⼦哒:i 3 2 1 0bi 1 1 0 1t 1 3 6 13ci (1*224)mod2537 (224*224*224)mod2537 (514*514)mod2537(348*348*224)mod2537=224 =514 =348 =1692到这⾥RSA加密的算法就讲完了,下⾯附上代码#include<stdio.h>#include<stdlib.h>/* 函数申明 */int long_n(int n);int shuru(char *arr, int k, char *wei, int is_first);void jiami(char *arr, int k, int e, int n);/* 输⼊函数,记录从键盘输⼊的明⽂*/int shuru(char *arr, int k, char *wei, int is_first){int i;char ch;/*判断是否为第⼀分组的输⼊,如果是则获取输⼊的字符,否则就将上⼀分组最后获取的字符作为这⼀分组的第⼀个字符*/if (is_first == 1)ch = getchar();elsech = *wei;for (i = 0; (i < k) && (ch != '\n');i++) //获取字符直到获取到回车符为⽌{arr[i] = ch;ch = getchar();}*wei = ch; //最后获取到的字符准备作为下⼀分组的第⼀个字符for (i = i; i < k; i++)arr[i] = 'a'; //输⼊不够⼀组个数的整数倍则补'a'(即为补零)if (ch == '\n') //接收到回车符返回0,否则为1return 0;elsereturn 1;}/*加密函数*/void jiami(char *arr, int k, int e, int n){int m = 0,c=1, i, j,t=0, shu,temp,num=0;int *array;/*Mi赋值过程*/for (i = 0; i < k; i++){temp = 1;for (j = 0; j < (k-i-1)*2; j++)temp = temp * 10;shu = (int)arr[i] - 97;m = m + temp * shu;}temp = e;/*获取e的⼆进制表达形式的位数*/do{temp = temp / 2;num++;} while (temp != 0);array = (int *)malloc(sizeof(int)*k); //申请动态数组temp = e;/*动态数组存储e的⼆进制表达形式*//*动态数组存储e的⼆进制表达形式*/for (i = 0; i < num; i++){array[i] = temp % 2;temp = temp / 2;}/*避免出现天⽂数字的算法,详情见上⽂⽂字说明*/ for (i = num - 1; i >= 0; i--){t = t * 2;temp = c*c;if (temp > n){for (j = 0; temp - n*j >= 0; j++);j--;c = temp - n*j;}elsec = temp;if (array[i] == 1){t = t + 1;temp = c*m;if (temp > n){for (j = 0; temp - n*j >= 0; j++);j--;c = temp - n*j;}elsec = temp;}e = e / 2;}temp = c;i = 0;/*c的位数⼩于分组长度则在前补零*/do{temp = temp / 10;i++;} while (temp != 0);for (i; i < num; i++)printf("0");printf("%d", c);}/*获取分组的长度*/int long_n(int n){int temp,i,j,k,shi,comp=0;temp = n;/*获取n的位数*/for (i = 1; temp / 10 != 0; i++){temp = temp / 10;}temp = i;/*若n的位数为基数*/if (i % 2 != 0){i = i - 1;return i;}/*若位数为偶数*/elseelse{for (j = 0; j < i/2; j++){shi = 1;for (k = 0; k < temp - 2; k++)shi = shi * 10;comp = comp + shi * 25;temp = temp - 2;}if (comp <= n)return i;else{i = i - 2;return i;}}}/*主函数*/int main(){int p, q, e, d, n, fai_n, k, i,is_first=1;char ch,*arr,wei='a';printf("请输⼊p、q、e值,⽤空格间隔开\n");scanf_s("%d%d%d", &p, &q, &e); //从键盘获取p、q、e值n = p*q;fai_n = (p-1)*(q-1); //Φ(n)for (k = 0; (k*n + 1) % e != 0; k++);if ((k*n + 1) % e == 0)d = (k*n + 1) / e; //d *e ≡ 1 (mod Φ(n))k = long_n(n);k = k / 2; //分组的长度ch = getchar(); //缓冲回车符arr = (char *)malloc(sizeof(char)*k); //申请动态数组printf("请输⼊明⽂\n");while (1){i=shuru(arr,k,&wei,is_first); //调⽤输⼊字符的函数,接收到回车符返回0,否则为1 is_first = 0; //第⼀分组录⼊结束设为0jiami(arr,k,e,n); //调⽤加密函数if (i == 0) //接收到返回值为0跳出循环break;}printf("\n");return 0;}运⾏结果:如果有对算法和代码不理解或者有不同看法的请联系我哦,邮箱在我的信息⾥~~。
rsa算法代码c++语言

rsa算法代码c++语言RSA 算法是一种非对称加密算法,其中加密和解密使用的是不同的密钥,因此在 C++ 中实现 RSA 算法需要使用到一些复杂的数学运算和密码学知识。
以下是一个简单的 RSA 算法的示例代码,演示了如何生成密钥对以及进行加密和解密操作:```cpp#include <iostream>#include <vector>#include <cmath>#include <cstdlib>#include <ctime>using namespace std;// 生成大质数的函数bool isPrime(int n) {if (n <= 1)return false;if (n <= 3)return true;if (n % 2 == 0 || n % 3 == 0)return false;for (int i = 5; i * i <= n; i = i + 6)if (n % i == 0 || n % (i + 2) == 0)return false;return true;}// 生成随机大整数的函数int generateRandomPrime(int bits) {// 确保 bits 是一个有效的位数if (bits < 1)return -1;// 使用一个随机数生成器来生成一个随机的大整数random_device rd;mt19937 gen(rd());uniform_int_distribution<int> dis(0, (1 << bits) - 1);// 生成一个随机的大整数int num = dis(gen);// 检查生成的整数是否是质数while (!isPrime(num)) {num = dis(gen);}return num;}// RSA 加密函数vector<int> rsaEncrypt(vector<int> message, int publicKey) {vector<int> encryptedMessage;// 加密每个消息元素for (int i = 0; i < message.size(); i++) {int encrypted = message[i] ^ (publicKey * message[i]) % pow(2, message.size());encryptedMessage.push_back(encrypted);}return encryptedMessage;}// RSA 解密函数vector<int> rsaDecrypt(vector<int> encryptedMessage, int privateKey) {vector<int> message;// 解密每个密文元素for (int i = 0; i < encryptedMessage.size(); i++) {int decrypted = (privateKey * encryptedMessage[i]) % pow(2,encryptedMessage.size());message.push_back(decrypted);}return message;}int main() {// 生成密钥对int privateKey = generateRandomPrime(1024);int publicKey = privateKey * pow(2, privateKey - 1, privateKey);// 生成要加密的消息vector<int> message = {1, 2, 3, 4, 5};// 加密消息vector<int> encryptedMessage = rsaEncrypt(message, publicKey);// 输出密文cout << "密文: ";for (int i = 0; i < encryptedMessage.size(); i++)cout << encryptedMessage[i] << " ";cout << endl;// 解密密文vector<int> decryptedMessage = rsaDecrypt(encryptedMessage, privateKey);// 输出明文cout << "明文: ";for (int i = 0; i < decryptedMessage.size(); i++)cout << decryptedMessage[i] << " ";cout << endl;return 0;}```这段代码是一个简单的 RSA 算法的实现示例,主要包含了生成大质数、生成密钥对、加密和解密等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
char s[100],*c;
int n,e,d,i,C,j,k=0,len;
int str[100],b[30];
unsigned gcd(unsigned a, unsigned b ) {
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
void Egcd(int a, int b,int &x, int &y) { //ax-by=1 if(b==0||a==0)
{
x=1;
y=0;
return ;
}
if(a<b)
{
Egcd(a,b%a,x,y);
x=(int)(b*y+1)/a;
}
else
{
Egcd(a%b,b,x,y);
y=(int)(a*x-1)/b;
}
}
void RSA()
{
int p,q,N,Y;
printf("请输入素数p和q:");
scanf("%d %d",&p,&q);
n=p*q;
N=(p-1)*(q-1);
//printf("n=%d N=%d\n",n,N);
srand( (unsigned)time( NULL ) ); //初始化随机数
while(1) //产生随机整数e,e与N互质 {
e=rand()%N;
// printf("e==%d\n",e);
if(e==0)
continue;
if(gcd(N,e)==1)
{
break;
}
}
//printf("e=%d\n",e);
Egcd(e,N,d,Y);
// printf("d=%d Y=%d\n",d,Y);
printf("公钥PU={e=%d,n=%d}\n",e,n);
printf("私钥PR={d=%d,n=%d}\n",d,n);
}
void encrypt() //加密函数
{
len=strlen(s);
//hgprintf("len=%d\n",len);
for(i=0;i<len;i++) //去掉s[100]中的空格
{
if(s[i]<97||s[i]>122)
{
b[k]=i;
k++;
for(j=i;j<len-1;j++)
{
s[j]=s[j+1];
}
len--;
}
}
s[len]='\0'; //结束符
printf("密文是:");
for(i=0;i<len;i++)
C=1;
//printf("shiji=%d\n",s[i]-97);
for(int j=0;j<e;j++)
{
C=(C*(s[i]-97))%n;
// printf("C=%ld\n",C);
}
str[i]=C;
printf("%d ",str[i]);
}
printf("\n");
}
void decrypt() //解密函数
{
c=(char*)malloc(len*sizeof(int));
for(i=0;i<len;i++) //实现解密
{
C=1;
for(int j=0;j<d;j++)
{
C=(C*(str[i]))%n;
// printf("C=%ld\n",C);
}
// printf("C=%d\n",C);
c[i]=C+97;
}
c[i] = '\0';
// puts(c);
for(int z=0;z<k;z++) //加空格{
for(i=0; i<len; i++)
{
if (i==b[z])
{
for(j=len;j>i;j--)
{
c[j]=c[j-1];
}
c[i]=' ';
len++;
b[z+1]=b[z+1]+(z+1);
break;
}
}
c[len] = '\0';
printf("明文:");
puts(c);
}
int function()//系统功能选择页面
{
int choice;
printf("==============================================================\n"); printf(" 欢迎进入RSA算法 \n"); printf(" 1--加密 \n"); printf(" 2--解密 \n"); printf(" 3--退出 \n"); printf("==============================================================\n"); printf("请输入要选择的功能号:");
scanf("%d",&choice);
return choice;
}
int main()
{
int function();
int fc;
printf("请输入初始明文(小写):");
gets(s);
// puts(s);
RSA(); //提供私钥和公钥
while(1)
{
fc=function();
if(fc==1) //加密
encrypt();
else if(fc==2) //解密
decrypt() ;
else if(fc==3)
break;
else
printf("输入有误,请重新输入!/n");
}
return 0;
}。