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
#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;}