高精度类实现 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;
}
网友评论