迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版


Posted in PHP onMay 12, 2015

迪菲-赫尔曼(Diffie?Hellman)是一个可以让双方在不安全的公共信道上建立秘钥的一种算法,双方后期就可以利用这个秘钥加密(如RC4)内容。
迪菲-赫尔曼(Diffie?Hellman)算法原理很简单:

迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版

如上原理,最后很容易通过数学原理证明(g^b%p)^a%p = (g^a%p)^b%p,因此它们得到一个相同的密钥。
上面除了a,b和最后得出的公共密钥是秘密的,其它都是可以在公共信道上传递。实际运用中p很大(300位以上),g通常取2或5。那么几乎不可能从p,g和g^a%p算出a(离散数学问题)。

很多语言都对该算法做了实现,以PHP package中Crypt_DiffieHellman为例:

<?php
include 'DiffieHellman.php';
 
/*
 *   Alice: prime = 563
 *       generator = 5
 *       private key = 9
 *   Bob:  prime = 563
 *       generator = 5
 *       private key = 14
 */
 
$p = 563;
$g = 5;
$alice = new Crypt_DiffieHellman($p, $g, 9);
$alice_pubKey = $alice->generateKeys()->getPublicKey();
 
$bob = new Crypt_DiffieHellman($p, $g, 14);
$bob_pubKey = $bob->generateKeys()->getPublicKey();
 
$alice_computeKey = $alice->computeSecretKey($bob_pubKey)->getSharedSecretKey();
$bob_computeKey = $bob->computeSecretKey($alice_pubKey)->getSharedSecretKey();
 
echo "{$alice_pubKey}-{$bob_pubKey}-{$alice_computeKey}-{$bob_computeKey}"; //78-534-117-117
PHP 相关文章推荐
基于Zookeeper的使用详解
May 02 PHP
深入解析php之sphinx
May 15 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php 生成签名及验证签名详解
Oct 26 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP微信H5支付开发实例
Jul 25 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
PHP 反射(Reflection)使用实例
May 12 #PHP
PHP Reflection API详解
May 12 #PHP
php通过curl模拟登陆DZ论坛
May 11 #PHP
PHP中的魔术方法总结和使用实例
May 11 #PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 #PHP
PHP SPL标准库中的常用函数介绍
May 11 #PHP
PHP中的类型约束介绍
May 11 #PHP
You might like
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
Python中的__slots__示例详解
2017/07/06 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
护理自我鉴定范文
2013/10/06 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
留学顾问岗位职责
2014/04/14 职场文书
酒店管理求职信
2014/06/09 职场文书
大学生就业求职信
2014/06/12 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
党员作风建设自查报告
2014/10/23 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
酒店温馨提示语
2015/07/14 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书