迪菲-赫尔曼密钥交换(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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php单链表实现代码分享
Jul 04 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 PHP
php的单例模式及应用场景详解
Feb 27 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数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
网上抓的一个特效
2007/05/11 Javascript
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
python模块之StringIO使用示例
2015/04/08 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python实战之制作天气查询软件
2019/05/14 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python学习之os模块及用法
2020/06/03 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
医学院护理专业应届生求职信
2013/11/12 职场文书
银行求职推荐信范文
2013/11/30 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
JavaScript原型链详解
2021/11/07 Javascript
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python