迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版

   这篇文章主要介绍了迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版,需要的朋友可以参考下

  迪菲-赫尔曼(Diffie–Hellman)是一个可以让双方在不安全的公共信道上建立秘钥的一种算法,双方后期就可以利用这个秘钥加密(如RC4)内容。

  迪菲-赫尔曼(Diffie–Hellman)算法原理很简单:


  如上原理,最后很容易通过数学原理证明(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为例:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<?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

时间: 2024-08-02 01:42:50

迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版的相关文章

迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版_php实例

迪菲-赫尔曼(Diffie–Hellman)是一个可以让双方在不安全的公共信道上建立秘钥的一种算法,双方后期就可以利用这个秘钥加密(如RC4)内容. 迪菲-赫尔曼(Diffie–Hellman)算法原理很简单: 如上原理,最后很容易通过数学原理证明(g^b%p)^a%p = (g^a%p)^b%p,因此它们得到一个相同的密钥. 上面除了a,b和最后得出的公共密钥是秘密的,其它都是可以在公共信道上传递.实际运用中p很大(300位以上),g通常取2或5.那么几乎不可能从p,g和g^a%p算出a(离散

赫夫曼树

赫夫曼树又称最优树,是一类带权路径长度最短的树. 路径:由一结点到另一结点间的分支所构成 路径长度:路径上的分支数目 例如上面的a->e的路径长度=2 带权路径长度:结点到根的路径长度与结点上权的乘积 树的带权路径长度:结点到根的路径长度与结点上权的乘积 赫夫曼树:带权路径长度最小的树 上面这个图的树的值为WPL=7*2+5*2+2*2+4*2=36 赫夫曼树构造过程 基本思想:使权大的结点靠近根 操作要点:对权值的合并.删除.替换,总是合并当前值最小的两个 赫夫曼树的构造过程 根据给定的n个权

数据结构——赫夫曼树

1 基本概念 赫夫曼树(Huffman Tree)又称为最优树,是一类带权路径长度最短的树.本文仅讨论最优二叉树. 树的路径长度是指从树根到树中其余各个结点的路径长度之和.对具有n个结点的二叉树而言,完全二叉树具有最短的树的路径长度. 若在二叉树中,树叶结点带有权值,则有:结点的带权路径长度定义为从树根到该结点之间的路径长度与该结点上所带权值之积. 若树中有n个树叶结点,且每个树叶结点均带有权值,则有:树的带权路径长度定义为树中所有树叶结点的带权路径长度之和,可记为: 有时,也将树的路径长度称为

算法速成(十三)树操作之赫夫曼树

今天说下最后一种树,大家可否知道,文件压缩程序里面的核心结构,核心算法是什么?或许你知 道,他就运用了赫夫曼树. 听说赫夫曼胜过了他的导师,被认为"青出于蓝而胜于蓝",这句 话也是我比较欣赏的,嘻嘻. 一  概念 了解"赫夫曼树"之前,几个必须要知道 的专业名词可要熟练记住啊. 1: 结点的权    "权"就相当于"重要度" ,我们形象的用一个具体的数字来表示,然后通过数字的大小来决定谁重要,谁不重要. 2: 路径 树中从&q

数据-赫夫曼树的生成,完成赫夫曼编码的输出

问题描述 赫夫曼树的生成,完成赫夫曼编码的输出 实现赫夫曼树的生成,完成赫夫曼编码的输出: 要求 利用动态分配数组存储赫夫曼树,设计一组输入数据(要求为二元组,分别为字符集与每个字符出现的频率),能够对其进行如下操作: 1)对输入的数据构造成一棵Huffman 树. 2)根据生成的Huffman 树进行Huffman 编码,实现对输入数据的Huffman 编码输出. 我承认这是一个作业贴,但确实没时间做了 才来找人帮忙的

经典算法题每日演练——第十三题 赫夫曼树

       赫夫曼树又称最优二叉树,也就是带权路径最短的树,对于赫夫曼树,我想大家对它是非常的熟悉,也知道它的应用场景, 但是有没有自己亲手写过,这个我就不清楚了,不管以前写没写,这一篇我们来玩一把.   一:概念  赫夫曼树里面有几个概念,也是非常简单的,先来看下面的图: 1. 基础概念 <1>  节点的权: 节点中红色部分就是权,在实际应用中,我们用"字符"出现的次数作为权. <2>  路径长度:可以理解成该节点到根节点的层数,比如:"A&quo

编码-赫夫曼树出错 ,编译没错 不知道哪里错了运行不了

问题描述 赫夫曼树出错 ,编译没错 不知道哪里错了运行不了 编译没有错误,运行失败 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 没分号";" #define STACKINCREMENT 10 //存储空间分配增量 #define TRUE 1 #def

坚持追求永恒之美的Pinterest创始人希伯尔曼

目前热门图片的分享社区--Pinterest联合创始人兼CEO本•希伯尔曼(Ben Silbermann)曾在SXSW的互动大会上接受了硅谷的创业者兼撰稿人克里斯•迪克森(Chris Dixon)的专访,在采访中畅谈了自己不同寻常的创业之路. 曾经,Pinterest本来还是一家默默无闻.鲜有曝光的互联网创业公司,但是它用了半年的时间就迅速蹿红,而到后来每月独立访问用户数量已经突破了1100万,平均的每位用户每月在网站上逗留98分钟--这一时长记录目前在诸多社交平台中仅次于Tumblr和Face

Pinterest创始人希伯尔曼 视工程师为“大厨”

Pinterest联合创始人兼CEO希伯尔曼 热门图片分享社区Pinterest的联合创始人兼CEO本•希伯尔曼(Ben Silbermann)日前在SXSW互动大会上接受了硅谷创业者兼撰稿人克里斯•迪克森(Chris Dixon)的专访,畅谈了自己不同寻常的创业之路. 就在半年前,Pinterest还是一家默默无闻.鲜有曝光的互联网创业公司,但是它在过去半年里迅速蹿红,如今每月独立访问用户数量已突破1100万,平均每位用户每月在网站上逗留98分钟--这一时长在诸多社交平台中仅次于Tumblr和