迪菲-赫尔曼密钥交换(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 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
PHP+DBM的同学录程序(5)
Oct 09 PHP
php基础知识:类与对象(1)
Dec 13 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
PHP解决中文乱码
Apr 28 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
php5.2.0内存管理改进
2007/01/22 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jQuery 全选效果实现代码
2009/03/23 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
python如何通过protobuf实现rpc
2016/03/06 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
python异常处理和日志处理方式
2019/12/24 Python
Python实现一个优先级队列的方法
2020/07/31 Python
数控专业毕业生求职信范文
2013/09/21 职场文书
毕业生简单求职信
2013/11/19 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
学生评语大全
2014/04/18 职场文书
煤矿安全承诺书
2014/05/22 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
办公室个人总结
2015/02/28 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle