您的位置:首页 > 编程语言 > Go语言

高精度类实现 Diffie Hellman Algorithm

2014-03-22 14:17 399 查看
信息安全原理

作业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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐