迪菲-赫尔曼密钥交换(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中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
php中文语义分析实现方法示例
Sep 28 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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常用函数 推荐收藏保存
2010/02/21 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python进行数据提取的方法总结
2016/08/22 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Python hmac模块使用实例解析
2019/12/24 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
详解python的super()的作用和原理
2020/10/29 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
Django 实现图片上传和下载功能
2020/12/31 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
幼儿园秋游活动方案
2014/01/21 职场文书
家长会主持词
2014/03/26 职场文书
医院义诊活动总结
2014/07/04 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫