Basic steps of RSA algorithm
-
The steps to generate the public key PK and private key SK are as
follows:
-
Randomly choose two large prime numbers P and Q. P is not equal to
Q.
-
Multiply the two prime numbers P and Q to get an N, that is, N=PQ
-
Subtract one from P and Q respectively, and then multiply them
together to get a number T, that is, T = (Q-1) * (P-1)
-
Choose an integer E as a key so that E and T are relatively prime (
the greatest common divisor of E and T is 1), and E must be less
than T
-
According to the formula DE mod T = 1, the value of D is calculated
as another key
-
Through the above steps, the three data N, E, and D can be found,
where (N, E) is the public key and (N, D) is the private key.
Encrypt information with public key
Plain text: M
Encryption:
Cipher text: C
Decrypt message with private key
Cipher text: C
Decryption:
Plain text: M
In a public-key system using RSA, you intercept the cipher text C = 10 sent lo a user whose public key is e = 5,n = 35. What is the plain text M
answer:
We know that 35 is relatively small, and we can decompose the prime numbers into 5 and 7
Then we can get T=(5-1)X(7-1)=24,24 and 5 are relatively prime
We can use the formula DE mod T=1 to get the value of D which is the private key
We can know the private key from the picture (n,D)=(35,5)
Decrypt
M=5,so the plain text is 5
cpp
#include<iostream>
int candp(int b,int p, int k) //b--明文或密文 p--指数(e/d) k--模数
{
if (p == 1)
{
return b % k;
}
if (p == 2)
{
return b * b % k;
}
if (p % 2 == 0)
{
int sum = candp(b, p / 2, k);
return sum * sum % k;
}
if (p % 2 == 1)
{
int sun = candp(b, p / 2, k);
return sun * sun * b % k;
}
}
int main()
{
int d = 1;
//求e的乘法逆
int e = 5;
int t = 24;
while (((e * d) % t) != 1)
{
d++;
}
std::cout <<d<<std::endl;
int n=35, x=0, y=10;
x = candp(y, d, n);
std::cout << "明文为:" << x << std::endl;
return 0;
}