迪菲-赫尔曼密钥交换(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 相关文章推荐
xajax写的留言本
Nov 25 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
网页常用特效代码整理
2006/06/23 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
JavaScript OOP类与继承
2009/11/15 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
vant 中van-list的用法说明
2020/11/11 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Python程序慢的重要原因
2020/09/04 Python
如何将json数据转换为python数据
2020/09/04 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
开会迟到检讨书
2014/01/08 职场文书
党员干部一句话承诺
2014/05/30 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
2015年技术员工作总结
2015/04/10 职场文书
活动总结书怎么写
2015/05/11 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
SQLServer常见数学函数梳理总结
2022/08/05 MySQL