迪菲-赫尔曼密钥交换(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 Google的translate API代码
Dec 10 PHP
php中几种常见安全设置详解
Apr 06 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP入门教程之表单与验证实例详解
Sep 11 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
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
CI框架附属类用法分析
2018/12/26 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
详谈javascript异步编程
2016/02/21 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python转码问题的解决方法
2008/10/07 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
用Python解决x的n次方问题
2019/02/08 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python实现搜索算法的实例代码
2020/01/02 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
公务员总结性个人自我评价
2013/12/05 职场文书
向领导表决心的话
2014/03/11 职场文书
终止合同协议书
2014/04/17 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS