php如何实现迪菲赫尔曼密钥交换(diffie–hellman)算法?本文主要介绍了迪菲-赫尔曼密钥交换(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为例:
<?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 算法之分割数组,不用array_chunk()_php教程
php 算法之如何打印出下图
php 解决session死锁的方法_php教程
以上就是php实现迪菲赫尔曼密钥交换(diffie–hellman)算法的详细内容。