高精度类实现 Diffie Hellman Algorithm

信息安全原理

作业2 第2题


高精度类写好了还不行

还要实现一下DH算法


那把表达式和DH算法写一个main()里吧


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值