迪菲-赫爾曼密鑰交換(Diffie–Hellman)算法原理和PHP實現(xiàn)版
迪菲-赫爾曼(Diffie–Hellman)是一個可以讓雙方在不安全的公共信道上建立秘鑰的一種算法,雙方后期就可以利用這個秘鑰加密(如RC4)內(nèi)容。
迪菲-赫爾曼(Diffie–Hellman)算法原理很簡單:
如上原理,最后很容易通過數(shù)學原理證明(g^b%p)^a%p = (g^a%p)^b%p,因此它們得到一個相同的密鑰。
上面除了a,b和最后得出的公共密鑰是秘密的,其它都是可以在公共信道上傳遞。實際運用中p很大(300位以上),g通常取2或5。那么幾乎不可能從p,g和g^a%p算出a(離散數(shù)學問題)。
很多語言都對該算法做了實現(xiàn),以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
相關(guān)文章
PHP學習記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【接口、抽象類、靜態(tài)方法等
這篇文章主要介紹了PHP學習記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ),結(jié)合實例形式分析了PHP面向?qū)ο蟪绦蛟O(shè)計中接口、抽象類、靜態(tài)方法等相關(guān)概念、原理、用法與操作注意事項,需要的朋友可以參考下2019-12-12PHP大批量插入數(shù)據(jù)庫的3種方法和速度對比
這篇文章主要介紹了PHP大批量插入數(shù)據(jù)庫的3種方法和速度對比,3種方法分別使用普通insert語句、insert into語句和事務(wù)提交,需要的朋友可以參考下2014-07-07實現(xiàn)WordPress主題側(cè)邊欄切換功能的PHP腳本詳解
這篇文章主要介紹了實現(xiàn)WordPress主題側(cè)邊欄切換功能的PHP腳本詳解,包括為WordPress主題添加管理選項的方法,需要的朋友可以參考下2015-12-12thinkphp5.1的model模型自動更新update_time字段實例講解
這篇文章主要介紹了thinkphp5.1的model模型自動更新update_time字段實例講解,文章代碼示例比較簡單實用,有正在學習tp的同學可以跟著小編好好閱讀下2021-03-03