Diffie Hellman金鑰協商演算法原理及實現

2021-10-25 05:23:19 字數 2752 閱讀 3274

實現補充

1、通訊雙方通過協商,共同建立會話金鑰,任何乙個參與者均對結果產生影響,不需要任何第三方參與

2、會話金鑰由每個協議參與者分別產生的引數通過計算得到

1、初始化:a選取乙個生成元g和乙個大素數p,傳送給b

2、a隨機選取0<xx mod p後,將x傳給b

3、b隨機選取0<yy mod p後,將y傳給a

4、a計算yx mod p得到會話金鑰k1

5、b計算xy mod p得到會話金鑰k2

6、由下可知 k1 == k2,此時雙方便可利用會話金鑰進行加密通訊了

#ifndef crypto_h

#define crypto_h

#include

/*** 編譯器:tdm-gcc 4.8.1 64bit

* * 基於dh的金鑰協商加密類

* 1、請先使用crypto::init()方法初始化隨機種子

* 2、客戶端構造此類,服務端通過客戶端生成的 [g,p] 構造

* 3、客戶端通過呼叫get_public()方法得到乙個陣列 [g, p]

* 4、客戶端、服務端通過get_pub_key()方法獲取公鑰 c、s 用於協商

* 5、客戶端、服務端通過get_key(size_t pub_key)方法獲取金鑰用於加密

* 6、客戶端、服務端可使用crypto(char *data, size_t size, const char *key)方法加解密

*/class

crypto

;#endif

#include

"crypto.h"

#include

#include

#include

crypto::

crypto()

crypto::

crypto

(size_t g, size_t p)

void crypto::

init()

size_t *crypto::

get_public()

size_t crypto::

get_pub_key()

char

*crypto::

get_key

(size_t pub_key)

void crypto::

crypto

(char

*data, size_t size,

const

char

*key)

}size_t crypto::

create_big_integer()

size_t crypto::

pow_mod

(size_t n,

unsigned

int times, size_t mod)

return tmp;

}crypto::

~crypto()

#include

#include

#include

"crypto.h"

using

namespace std;

void

print

(char

*data,

int size)

cout << endl;

}int

main

(int argc,

char

** ar**)

// 模擬會話

char data[11]

="helloworld"

;// 明文

cout <<

"a加密: "

<< endl;

client.

crypto

(data,

10, k1)

;// 使用金鑰加密

print

(data,10)

; cout <<

"**********"

<< endl;

cout <<

"b解密: "

<< endl;

server.

crypto

(data,

10, k2)

;// 使用金鑰解密

原理中說的是生成隨機大素數,在實現的時候我生成的是大整數,因為大素數生成是個麻煩的事情,我也嘗試寫過,但是生成速度太慢,影響體驗。考慮到我們的加密方式是按位異或加解密,用這種方法就算不使用大素數依舊不會出問題,所以直接生成的是乙個大整數,關於大素數的生成可以看一下 這篇文章,講得挺好的。

Diffie Hellman金鑰交換

最近在看網課的時候了解了diffie hellman金鑰交換演算法,這裡記錄下來。在公共網路中傳輸資料,很容易被第三方擷取。為了加強資料安全需要使用加密演算法。dh金鑰就是其中一種。dh金鑰就是很好的一種演算法是一種安全協議。能允許雙方在不安全的通道上建立只有彼此知曉的金鑰,其他人即使能看到傳輸的資...

Diffie Hellman金鑰交換

diffie hellman金鑰交換 dhke 是由whitfield diffie和martin hellman在1976年提出的。金鑰交換方案提供了實際中金鑰分配問題的解決方案,即允許雙方通過不安全的通道進行交流獲得乙個共同金鑰。許多公開和商業密碼協議中都實現了這種基本的金鑰協議技術,比如安全外...

Diffie Hellman 金鑰交換協議

設p 是乙個素數,gf p 上的離散對數是困難的,設 g為其生成元,為達到通訊雙方共享金鑰的目的,通訊雙方a和 b分別進行如下操作。1 a 進行如下兩步操作 隨機選取乙個整數 xa,0 xa 計算ya gxa mod p,將ya 傳送給b 2 b進行如下兩步操作 隨機選取乙個整數xb,0 xb傳送給...