RSA算法涉及的数学知识和理论网上一搜一大把,例如RSA加密算法Python实现_rsa算法python源码-CSDN博客
这里只展示我自己写的RSA算法的c++代码(有段时间没敲代码有点手生了,将就着看吧)
#include<bits/stdc++.h>
using namespace std;
#define int long long
//模下快速幂
int pow_quick(int a, int n, int m){
int res = 1;
while(n){
if(n & 1){
res = res * a % m;
}
a = a * a % m;
n >>= 1;
}
return res;
}
int c, m, e, d;
//c为密文,m为明文,e为加密密钥,d为解密密钥
int N, L, p, q;
//p与q互质,N=p*q, L=(p-1)(q-1)
//公钥(e,N)
int fid_e(){
e=2;
while(__gcd(e, L) != 1){
e++;
}
printf("公钥(e=%d, N=%d) ", e, N);
return e;
}
//加密 c = pow(m,e) % N
void encrypt(int e, int N, int L){
c = pow_quick(m, e, N);
//cout << "___" << c;
printf("明文m=%d加密后的数c=%d\n", m, c);
}
//私钥(d,N)
int fid_d(int e){
d==2;
while((e*d)%L != 1) {
d++;
}
printf("私钥(d=%d, N=%d) ", d, N);
return d;
}
//解密 m = pow(c,d) % N
void decrypt(int d, int N, int L){
m = pow_quick(c, d, N);
//cout << "___" << m;
printf("密文c=%d解密后的数m=%d\n", c, m);
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
printf("请输入明文m, 互质的质数p、q: ");
scanf("%d%d%d", &m, &p, &q);
printf("m=%d, p=%d, q=%d\n", m, p, q);
N = p * q;
L = (p-1) * (q-1);
encrypt(fid_e(), N, L);
decrypt(fid_d(e), N, L);
return 0;
}
运行结果: