迪菲-赫尔曼密钥交换(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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
域名查询代码公布
Oct 09 PHP
php中的实现trim函数代码
Mar 19 PHP
MySQL授权问题总结
May 06 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
php有道翻译api调用方法实例
Dec 22 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 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&amp;&amp;mysql)一
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
MSN消息提示类
2006/09/05 Javascript
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
canvas时钟效果
2017/02/16 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
JS打印彩色菱形的实例代码
2018/08/15 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
用python计算文件的MD5值
2020/12/23 Python
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
秋季运动会表扬稿
2014/01/16 职场文书
合作意向书
2014/07/30 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
创业计划书之养殖业
2019/10/11 职场文书