RSA C语言实现

2019-10-04  本文已影响0人  porridgechen890
#include <iostream>
using namespace std;

//判断互质,返回值为1则互质
int mgcd(int a,int b)
{
    int t;
    if(a<b)
    {
        t=a;a=b;b=t;
    }
    while(a%b)
    {
        t=b;
        b=a%b;
        a=t;
    }
    return b;
}

//加密和解密
int jiami(int m, int e, int n)
{
    int r = 1;
    e = e + 1;
    while (e != 1)
    {
        r = r * m;
        r = r % n;
        e--;
    }
    return r;
}

int main(int argc, const char * argv[]) {
    
    int p,q;
    cout << "input p:";
    cin >> p;
    cout << "input q:";
    cin >> q;
    while (mgcd(p, q) != 1){
        cout << "input p:";
        cin >> p;
        cout << "input q:";
        cin >> q;
    };
    
    
    //n
    int n = p * q;
    cout << "(1) n = " << n << endl;
    
    //l
    int l = (p - 1) * (q - 1);
    cout << "(2) l = " << l << endl;
    
    //e
    int e = 0;
    for (int i = 2; i < l; i++)
    {
        if (1 == mgcd(l, i))
        {
            e = i;
            break;
        }
    }
    cout << "(3) e = " << e << endl;
    
    //d
    int d = 1;
    while (((e * d) % l) != 1){
        d++;
    };
    cout << "(4) d = " << d << endl;
    
    //public(e,n) private(d,n)
    int m = 0;
    cout << "input MingWen(m,MingWen < n):";
    cin >> m;
    while (m >= n)
    {
        cout << "input MingWen(m,MingWen < n):";
        cin >> m;
    };
    
    int miwen = jiami(m, e, n);
    cout << "mi wen:" << miwen << endl;
    
    int mingwen = jiami(miwen, d, n);
    cout << "ming wen:" << mingwen << endl;
    
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读