美文网首页
高精度类实现 DH Algorithm

高精度类实现 DH Algorithm

作者: Amrzs | 来源:发表于2014-06-14 14:35 被阅读149次

    高精度类实现 Diffie Hellman Algorithm

    from my csdn blog

    信息安全原理 hw2-2

    高精度类写好了还不行

    还要实现一下DH算法

    // name: main.cpp
    // author: amrzs
    // date: 2014/03/22
    
    #include <string>
    #include <iostream>
    
    #include "bigint.h"
    
    using namespace std;
    
    Bigint calc(Bigint a, Bigint b, char c){
    
        Bigint result;
        switch(c){
            case '+':
                result = a + b;
                break;
            case '-':
                result = a - b;
                break;
            case '*':
                result = a * b;
                break;
    
            case '/':
                result = a / b;
                break;
            case '%':
                result = a % b;
                break;
            default:
                cout << "You input a wrong operator" << endl;
                break;
        }
        
        return result;
    }
    
    
    int main(){
    
        cout <<"If you want to calculate an expression then input \"EX 123456789 * 987654321\"" << endl
            <<"if DH algorithm then input \"DH\" and something as follow" << endl;
        
        string sFlag, s1, s2;
        char ch;
    
        while(1){ // don't like for(;;)
                    
            cin >> sFlag;
            if("EX" == sFlag){
    
                cin >> s1 >> ch >> s2;
                Bigint a(s1), b(s2);
                Bigint result = calc(a, b, ch);
                cout << "The result of expression is: ";
                result.printNum();
            }else if("DH" == sFlag){
    
                cout << "Please input the shared message g and p" << endl;
                cin >> s1 >> s2;
                Bigint g(s1), p(s2);
    
                cout << "Please input your secret key a" << endl;
                cin >> s1;
                Bigint a(s1), A;
                A = g.getPow(a, p);
                cout << "Your public key A is: ";
                A.printNum();
    
                cout << "You send g, p and A to another person" << endl;
                cout << "He received your shared message p, g and public key A" << endl;
                cout << "Please input his secret key b" << endl;
                cin >> s1;
                Bigint b(s1), B;
                B = g.getPow(b, p);
                cout << "His public key is: ";
                B.printNum();
                cout << "He sends the public key B to you" << endl;
                
                cout << "K = B^a mod p and you calculate the K is: " << endl;
                Bigint K = B.getPow(a, p);
                K.printNum();
    
                cout << "K = A^b mod p and he calculates the K is: " << endl;
                K = A.getPow(b, p);
                K.printNum();
            }else{
                cout << "Your input is wrong, please try again!" << endl;
            }
    
            cout <<"If you want to calculate an expression then input EX 123456789 * 987654321" << endl
                <<"if DH algorithm then input DH and something as follow" << endl;
        }
    
        return 0;
    }
    

    按照维基百科上的小数据试了一下,没有问题

    把DH写成函数了,再发一遍好了

    // name: main.cpp
    // author: amrzs
    // date: 2014/03/22
    
    #include <string>
    #include <iostream>
    
    #include "bigint.h"
    
    using namespace std;
    
    Bigint calc(Bigint a, Bigint b, char c){
    
        Bigint result;
        switch(c){
            case '+':
                result = a + b;
                break;
            case '-':
                result = a - b;
                break;
            case '*':
                result = a * b;
                break;
            case '/':
                result = a / b;
                break;
            case '%':
                result = a % b;
                break;
            default:
                cout << "You input a wrong operator" << endl;
                break;
        }
        
        return result;
    }
    
    void DiffieHellman(){
    
        string s1, s2;    
    
        cout << "Please input the shared message g and p" << endl;
        cin >> s1 >> s2;
        Bigint g(s1), p(s2);
    
        cout << "Please input your secret key a" << endl;
        cin >> s1;
        Bigint a(s1), A;
        A = g.getPow(a, p);
        cout << "Your public key A is: " << endl;
        A.printNum();
    
        cout << "You send g, p and A to another person" << endl;
        cout << "He received your shared message p, g and public key A" << endl;
        cout << "Please input his secret key b" << endl;
        cin >> s1;
        Bigint b(s1), B;
        B = g.getPow(b, p);
        cout << "His public key is: " << endl;
        B.printNum();
        cout << "He sends the public key B to you" << endl;
    
        cout << "K = B^a mod p and you calculate the K is: " << endl;
        Bigint K = B.getPow(a, p);
        K.printNum();
    
        cout << "K = A^b mod p and he calculates the K is: " << endl;
        K = A.getPow(b, p);
        K.printNum();
    }
    
    
    int main(){
    
        cout <<"If you want to calculate an expression then input \"EX 123456789 * 987654321\"" << endl
            <<"if DH algorithm then input \"DH\" and something as follow" << endl;
        
        string sFlag, s1, s2;
        char ch;
    
        while(1){ // don't like for(;;)
                    
            cin >> sFlag;
            if("EX" == sFlag){
    
                cin >> s1 >> ch >> s2;
                Bigint a(s1), b(s2);
                Bigint result = calc(a, b, ch);
                cout << "The result of expression is: ";
                result.printNum();
            }else if("DH" == sFlag){
    
                DiffieHellman();
            }else{
    
                cout << "Your input is wrong, please try again!" << endl;
            }
    
            cout <<"If you want to calculate an expression then input EX 123456789 * 987654321" << endl
                <<"if DH algorithm then input DH and something as follow" << endl;
        }
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:高精度类实现 DH Algorithm

          本文链接:https://www.haomeiwen.com/subject/orqjtttx.html