迪菲-赫尔曼密钥交换(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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
php多文件上传下载示例分享
Feb 20 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
PHP共享内存用法实例分析
Feb 12 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
swoole锁的机制代码实例讲解
Mar 04 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP编码转换
2012/11/05 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
通过C++学习Python
2015/01/20 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
国培计划培训感言
2014/03/11 职场文书
教室标语大全
2014/06/21 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
单位综合评价意见
2015/06/05 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers