RSA加解密算法c++实现

 RSA算法涉及的数学知识和理论网上一搜一大把,例如RSA加密算法Python实现_rsa算法python源码-CSDN博客

【密码学基础】RSA加密算法-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;
}

运行结果:

RSA (Rivest-Shamir-Adleman) 算法是一种非对称加密技术,用于保护数据的安全传输。它由三个步骤组成:密钥生成、加密和解密。以下是C++实现RSA算法的一个简化版概述: 1. **密钥生成**: - 选择两个大素数p和q。 - 计算n=p*q,这将是公钥的模数。 - 根据欧几里得定理计算欧拉函数phi(n)=(p-1)*(q-1)。 - 选取一个e,满足1<e<phi(n),且gcd(e, phi(n))=1(即e与phi(n)互质)。e通常是一个小于phi(n)的公共因子。 - 使用扩展欧几里得算法找到d,使得(d*e)%phi(n)=1。d是私钥的一部分。 2. **加密**: - 对明文消息m取模n(m < n),得到整数c。 - 使用公式 `c ≡ m^e mod n` 进行加密,其中c是密文,e是公钥指数。 3. **解密**: - 使用公式 `m ≡ c^d mod n` 进行解密,其中d是私钥指数。 ```cpp #include <bits/stdc++.h> using namespace std; // ...省略大素数检测和密钥生成部分... void encrypt(int message, int modulus, int public_exponent, int& ciphertext) { ciphertext = pow(message, public_exponent, modulus); } int decrypt(int ciphertext, int modulus, int private_exponent) { return pow(ciphertext, private_exponent, modulus); } // ...其他辅助函数... int main() { // 密钥生成和存储 // ...省略实际生成过程... // 加密示例 int message = 123; int ciphertext; encrypt(message, n, e, ciphertext); // 解密示例 int plaintext = decrypt(ciphertext, n, d); cout << "Original message: " << plaintext << endl; return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值