迪菲-赫尔曼密钥交换(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 相关文章推荐
PHP 柱状图实现代码
Dec 04 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
php使用array_search函数实现数组查找的方法
Jun 12 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
php的4种常用运行方式详解
Dec 22 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
php中用unset销毁变量并释放内存
May 10 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
论建造顺序的重要性
2020/03/04 星际争霸
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
javascript数组去掉重复
2011/05/12 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python中Django 后台自定义表单控件
2017/03/28 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python多线程使用方法实例详解
2019/12/30 Python
Python几种常见算法汇总
2020/06/02 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
黄金酒广告词
2014/03/21 职场文书
安全保证书怎么写
2015/02/28 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
python热力图实现的完整实例
2022/06/25 Python