迪菲-赫尔曼密钥交换(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网上调查系统
Oct 09 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
Laravel关系模型指定条件查询方法
Oct 10 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
php class类的用法详细总结
2013/10/17 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
python在windows下实现备份程序实例
2014/07/04 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python多项式回归的实现方法
2019/03/11 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
struct和class的区别
2015/11/20 面试题
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
会计实习自我鉴定
2013/12/04 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
员工工作表现评语
2014/04/26 职场文书
品德评语大全
2014/05/05 职场文书
ktv好的活动方案
2014/08/17 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
建党伟业电影观后感
2015/06/01 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis