迪菲-赫尔曼密钥交换(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 相关文章推荐
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
浅谈discuz密码加密的方式
May 22 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
PHP反射机制用法实例
Aug 28 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
php格式化json函数示例代码
May 12 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP设置images目录不充许http访问的方法
Nov 01 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
js使用心得分享
2015/01/13 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
标记环介质访问控制协议
2016/03/27 面试题
踏青活动策划方案
2014/08/19 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Java spring单点登录系统
2021/09/04 Java/Android
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python