首页 > 开发 > PHP > 正文

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

2024-05-04 23:35:03
字体:
来源:转载
供稿:网友

这篇文章主要介绍了迪菲-赫尔曼密钥交换(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. <?php 
  2. include 'DiffieHellman.php'
  3.  
  4. /* 
  5. * Alice: prime = 563 
  6. * generator = 5 
  7. * private key = 9 
  8. * Bob: prime = 563 
  9. * generator = 5 
  10. * private key = 14 
  11. */ 
  12.  
  13. $p = 563; 
  14. $g = 5; 
  15. $alice = new Crypt_DiffieHellman($p$g, 9); 
  16. $alice_pubKey = $alice->generateKeys()->getPublicKey(); 
  17.  
  18. $bob = new Crypt_DiffieHellman($p$g, 14); 
  19. $bob_pubKey = $bob->generateKeys()->getPublicKey(); 
  20.  
  21. $alice_computeKey = $alice->computeSecretKey($bob_pubKey)->getSharedSecretKey(); 
  22. $bob_computeKey = $bob->computeSecretKey($alice_pubKey)->getSharedSecretKey(); 
  23.  
  24. echo "{$alice_pubKey}-{$bob_pubKey}-{$alice_computeKey}-{$bob_computeKey}"//78-534-117-117 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表