对RSA算法,已知参数: p=3,q=11, M=2, 计算公私钥,并对明文进行加密,然后进行解密。,需要过程
时间: 2023-06-27 09:03:36 浏览: 128
首先,我们需要计算出 RSA 算法中的两个重要参数:N 和 φ(N)。
N = p * q = 3 * 11 = 33
φ(N) = (p - 1) * (q - 1) = 2 * 10 = 20
接下来,我们需要选择一个整数 e,使得 1 < e < φ(N) 且 e 与 φ(N) 互质。我们可以选择 e = 3。
接下来,我们需要计算出 e 的逆元 d,使得 (e * d) mod φ(N) = 1。可以使用扩展欧几里得算法来计算 d。
20 = 6 * 3 + 2
3 = 2 * 1 + 1
2 = 2 * 1 + 0
由此可知,gcd(3, 20) = 1,因此 e = 3 与 φ(N) 互质。我们可以使用扩展欧几里得算法来计算 d:
1 = 3 - 2 * 1
1 = 3 - (20 - 6 * 3) * 1
1 = 7 * 3 - 20
因此,d = 7。
现在我们已经计算出了 RSA 算法的公私钥对:
公钥:N = 33,e = 3
私钥:N = 33,d = 7
接下来,我们可以对明文 M = 2 进行加密。加密过程如下:
C ≡ M^e (mod N)
C ≡ 2^3 (mod 33)
C ≡ 8 (mod 33)
因此,加密后的密文为 C = 8。
最后,我们可以对密文进行解密。解密过程如下:
M ≡ C^d (mod N)
M ≡ 8^7 (mod 33)
M ≡ 2 (mod 33)
因此,解密后的明文为 M = 2。
相关问题
已知RSA加密算法中,p=5.q=17e-3.明文m=15,求公钥、私钥及密文,写出计算过程
1. 计算n和φ(n)
n = p*q = 5*17 = 85
φ(n) = (p-1)*(q-1) = 4*16 = 64
2. 选择公钥e
选择一个与φ(n)互质的整数,通常选择质数,本例中选择e=3。
3. 计算私钥d
根据扩展欧几里得算法,计算d,满足 e*d ≡ 1 (mod φ(n))
即 3*d ≡ 1 (mod 64)
d = 43
4. 公钥:(e, n),私钥:(d, n)
公钥:(3, 85)
私钥:(43, 85)
5. 加密明文m
密文 c ≡ m^e (mod n)
即 c ≡ 15^3 (mod 85)
c = 15^3 % 85 = 60
6. 解密密文c
明文 m ≡ c^d (mod n)
即 m ≡ 60^43 (mod 85)
m = 60^43 % 85 = 15
所以,公钥为(3,85),私钥为(43,85),密文为60,明文为15。
已知明文,选择p=11,q=13,e=17,计算出秘钥d,并实现RSA加密流程,c++
根据RSA算法的原理,我们可以先计算出n = p*q = 143,然后计算出欧拉函数φ(n) = (p-1)*(q-1) = 120。
接下来,我们需要求出d,满足e*d ≡ 1 (mod φ(n)),即17*d ≡ 1 (mod 120)。通过扩展欧几里得算法可以求出d = 89。
现在我们就可以进行RSA加密的流程了,假设明文为m = 7。
首先,我们需要将明文m进行加密,加密后的密文为c = m^e (mod n) = 7^17 (mod 143) = 30。
然后,我们可以将密文c进行解密,解密后的明文为m' = c^d (mod n) = 30^89 (mod 143) = 7。
因此,我们成功地进行了RSA加密和解密的流程。
以下是C++代码实现:
```
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int mod_inverse(int a, int m) {
int m0 = m, t, q;
int x0 = 0, x1 = 1;
if (m == 1)
return 0;
while (a > 1) {
q = a / m;
t = m;
m = a % m, a = t;
t = x0;
x0 = x1 - q * x0;
x1 = t;
}
if (x1 < 0)
x1 += m0;
return x1;
}
int power_mod(int a, int b, int m) {
int res = 1;
while (b > 0) {
if (b & 1)
res = (res * a) % m;
a = (a * a) % m;
b >>= 1;
}
return res;
}
int main() {
int p = 11, q = 13, n = p * q, phi = (p - 1) * (q - 1), e = 17, d;
d = mod_inverse(e, phi);
int m = 7;
int c = power_mod(m, e, n);
int m_prime = power_mod(c, d, n);
cout << "Public key: (" << e << ", " << n << ")" << endl;
cout << "Private key: (" << d << ", " << n << ")" << endl;
cout << "Plaintext: " << m << endl;
cout << "Ciphertext: " << c << endl;
cout << "Decrypted plaintext: " << m_prime << endl;
return 0;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)