迪菲-赫尔曼密钥交换(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 相关文章推荐
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
java解析json方法总结
May 16 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浮点数知识
2015/05/13 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python挖矿算力测试程序详解
2019/07/03 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Python实现一个论文下载器的过程
2021/01/18 Python
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
应届生学校辅导员求职信
2013/11/07 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
团队拓展活动方案
2014/08/28 职场文书
意向协议书
2015/01/27 职场文书
公司辞职信模板
2015/05/13 职场文书
工作简报范文
2015/07/21 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
2016七一建党节慰问信
2015/11/30 职场文书