C++ 验证DH算法
网络信息安全作业二:编程实现DH算法的密钥交换流程
1.说明
运行环境:vs2010
开发语言:c++
2.DH算法原理的简单说明
A和B双方进行通信
选取素数p和整数a,a为p的原根,a,p公开。
(1)A:选取XA<p,计算YA=a^XA mod p;
(2)B:选取XB<p,计算YB=a^XB mod p;
(3)A,B交换YA、YB,XA,XB保密
(4)A:k=YB^a mod p;
B:k=YA^a mod p;
3.源代码
(由于主要的目的是验证DH算法,及说明DH算法的密钥交换流程,为简化编程,故将p=19,a=3)
#include<iostream>
#include<cstdlib>
#include<time.h>
#include<math.h>
using namespace std;
class DH
{
private:int p; //素数pint a; //p的原根aint X; //私钥long int k; //共享密钥
public:int Y1; //自己公钥double Y2; //对方公钥DH() { p=19; a=3; X=0; k=0; Y1=0; Y2=0;}void Generate_Prik() //生成私钥{X=1+rand()%p;}void Generate_Pubk() //生成公钥{double a1=a*1.0;Y1=pow(a1,X);Y1=Y1%p;}void Exchange_PubK(double Y) //交换公钥{Y2=Y;}void Generate_ShareKey() //生成共享密钥{k=pow(Y2,X);k=k%p;}//打印一下参数,说明DH算法交换密钥的过程void Print_X() //打印私钥{cout<<X<<endl;}void Print_Y1() //打印自己公钥{cout<<Y1<<endl;}void Print_Y2() //打印对方公钥{cout<<Y2<<endl;}void Print_ShareKey() //打印共享密钥{cout<<"K="<<k<<endl;}
};
int main()
{srand((int)time(0));//通信双方A和BDH A;DH B;//A,B生成各自的私钥A.Generate_Prik();B.Generate_Prik();//A,B生成各自的公钥A.Generate_Pubk();B.Generate_Pubk();//A,B交换公钥A.Exchange_PubK(B.Y1);B.Exchange_PubK(A.Y1);//A,B生成共享密钥A.Generate_ShareKey();B.Generate_ShareKey();/*DH算法交换密钥过程说明*/cout<<"A,B生成私钥:"<<endl;cout<<"XA=";A.Print_X();cout<<"XB=";B.Print_X();cout<<endl;cout<<"A,B生成公钥:"<<endl;cout<<"YA=";A.Print_Y1();cout<<"YB=";B.Print_Y1();cout<<endl;cout<<"A,B交换公钥:"<<endl;cout<<"A收到B的公钥 YB=";A.Print_Y2();cout<<"B收到A的公钥 YA=";B.Print_Y2();cout<<endl;cout<<"A,B生成共享密钥:"<<endl;cout<<"A:"<<" ";A.Print_ShareKey();cout<<"B:"<<" ";B.Print_ShareKey();system("pause");
}
4.运行结果截图
C++ 验证DH算法相关推荐
- 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法
文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...
- 人脸验证 DeepID 算法实践
人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石 出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...
- java dh算法_https密钥交换DH算法
我们来看DH算法交换密钥的步骤.假设甲乙双方需要传递密钥,他们之间可以这么做: 甲首选选择一个素数p,例如509,底数g,任选,例如5,随机数a,例如123,然后计算A=g^a mod p,结果是21 ...
- dh算法 理论依据_DH算法原理
DH 算法原理 DH 是 Diffie-Hellman 的首字母缩写, 是 Whitefield 与 Martin Hellman 在 1976 年提出了一个的密钥交换协议.我个人倾向于称 DH 算法 ...
- 数据结构上机实践第13周项目1 - 验证Prim算法的验证
验证Prim算法的验证 本次实践所用到的算法库点击此处. 实现源代码: //*Copyright (c)2017,烟台大学计算机与控制工程学院* //*All rights reservrd.* // ...
- DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换及RSA(学习笔记)
DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换(学习笔记),来自B站: [不懂数学没关系]DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换_哔哩哔哩_bilibili ...
- RSA算法和DH算法的区别
同是非对称算法,非对称算法的根本原理就是单向函数,f(a)=b,但是用b很难得到a. RSA算法 RSA算法是基于大数难于分解的原理.不但可以用于认证,也可以用于密钥传输.那么用户A和B如何利用RSA ...
- 非对称加密算法-DH算法
一.概述 1.与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥).主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性. 2.非对称加密算法的加密.解密的效 ...
- 密钥交换算法(DH算法)
背景 对称加密算法通过密钥解决了数据加密问题,但是如何安全的传输密钥成为了下一个问题.如果密钥被窃取了,那对称加密数据就没有什么意义了.密钥交换算法(Diffie-Hellman算法 or DH算法) ...
- DH算法在密钥交换中的作用简介
DH算法是密钥交换协议/算法(Diffie-Hellman)的简称,是由Whitfield Diffie与Martin Hellman在1976年提出的一个密钥交换协议.这个机制的巧妙在于需要安全通信 ...
最新文章
- 学习 Spring (十三) AOP 配置
- 北海a货翡翠,牡丹江a货翡翠
- 在灾难发生之时,你在Facebook的社交定位或许能救你一命
- jQuery编写widget的一些窍门
- iview-admin框架运行步骤
- mysql基础14(关于mysql数据库在没有主键情况下去除重复数据办法)
- 为普通用户添加root权限
- 【python实战】使用 pygame 写一个 flappy-bird 类小游戏 | 涉及思路+项目结构+代码详解 | 新手向
- JAVA + LR实现apache流媒体的性能测试
- 阿里Java面经大全(整合版)
- Microsoft Excel 教程:如何在 Excel 中创建图表?
- 学生Web开发人员练习:电影评论II
- R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标
- border-radius简介
- 产销存报表直接在MB5B上取数
- InnoDB: Running in read-only mode 问题排查
- 【源码】数学研究者的Cleve_s实验室
- “子弹短信也压根撼动不了腾讯” | 畅言
- 2021年危险化学品生产单位安全生产管理人员考试资料及危险化学品生产单位安全生产管理人员实操考试视频
- ZFS文件系统数据恢复的方法