一周杂学(1) —— RSA分解n

RSA加密算法

RSA非对称加密是根据数论理论,使用两个较大的素数,通过指数运行进行的一种信息处理方法。

  • RSA算法加密过程:使用公钥对明文进行指数运算。
  • RSA算法解密过程:使用私钥对密文进行处理。

算法过程:

  1. 选取两个超大素数 p,q。
  2. 令n = p*q;则n的欧拉函数为Φ(n)=(p - 1)(q - 1)。
  3. 取随机整数e(1<e<)Φ(n),且e和Φ(n)互质。
  4. 计算e对于Φ(n)的模反元素d,即( e*d ) mod Φ(n) = 1。
  5. p,q销毁。( n,e )为公钥,( n,d )为私钥。

加解密过程:

  • c为密文,m为明文。
  • 加密:c = (m^e) mod n;
  • 解密:m = (c^e) mod n;

例题

解题思路

        对于n不大,则可暴力法对其分解。对于组成n的p和q皆为素数,则当除数c(c>=2)== q或p时,n余数为0。

#include<bits/stdc++.h> 
using namespace std;

int main( )
{
    int n;
    int p,q;
    cin>>n;
    int minPrimeNumber = 2;     //定义最小的素数
    while(minPrimeNumber<n){
        if(n%minPrimeNumber==0){
            n = n/minPrimeNumber;
            p = minPrimeNumber;
        }else{
            minPrimeNumber++;
        }
    }
    q = minPrimeNumber;
    cout<<(p-1)*(q-1);
    return 0;
}


版权声明:本文为weixin_57185053原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。