2012-05-31 100 views
2

這本書我讀,如下解釋算法:在Diffie-Hellman密鑰交換

  • 2人認爲2公「N和G」的數字都是知道的。
  • 2人認爲的2個私人「x和 「Y」 的數字,他們保守祕密。

交易情況如圖所示

enter image description here

我總結了以下Python代碼,看看如何作品和....它沒有。請幫我明白我在想什麼︰

#!/usr/bin/python 

n=22 # publicly known 
g=42 # publicly known 

x=13 # only Alice knows this 
y=53 # only Bob knows this 

aliceSends = (g**x)%n 
bobComputes = aliceSends**y 
bobSends = (g**y)%n 
aliceComputes = bobSends**x 


print "Alice sends ", aliceSends 
print "Bob computes ", bobComputes 
print "Bob sends  ", bobSends 
print "Alice computes ", aliceComputes 

print "In theory both should have ", (g**(x*y))%n 

--- 

Alice sends  14 
Bob computes 5556302616191343498765890791686005349041729624255239232159744 
Bob sends  14 
Alice computes 793714773254144 

In theory both should have 16 

回答

8

你忘了兩個模:

>>> 5556302616191343498765890791686005349041729624255239232159744 % 22 
16L 
>>> 793714773254144 % 22 
16 
4

羅馬是對的。不過,你最好看看pow()三個參數的函數。速度更快,第三個參數是模量

0

兩個人

#!/usr/bin/python 
p=141301# publicly known 
g=5728435 # publicly known 
x=76435 # only Alice knows this 
y=37846 # only Bob knows this 
aliceSends = (g**x)%p 
aliceComputes = (bobSends**x)%p 
bobSends = (g**y)%p 
bobComputes = (aliceSends**y) %p 
bobSends = (g**y)%p 
bobComputes = (aliceSends**y) %p 
print ("Alice sends ", aliceSends) 
print ("Bob computes ", bobComputes) 
print ("Bob sends  ", bobSends) 
print ("Alice computes ", aliceComputes) 

對於三個或三個以上的人

#!/usr/bin/python 
p=141301# publicly known 
g=5728435 # publicly known 
x=76435 # only Alice knows this 
y=37846 # only Bob knows this 
z=23# only carol knows this 
aliceSends = (g**x)%p 
bobSends = (aliceSends**y)%p 
carolComputes=(bobSends**z)%p 
bobSends2=(g**y)%p 
carolSends=(bobSends2**z)%p 
aliceComputes=(carolSends**x)%p 
carolSends2=(g**z)%p 
aliceSends2=(carolSends2**x)%p 
bobComputes=(aliceSends2**y)%p 
print ("Alice computes ga and sends it to Bob.",aliceSends) 
print ("Bob computes (ga)b = gab and sends it to Carol.",bobSends) 
print ("Carol computes (gab)c = gabc and uses it as her secret.",carolComputes) 
print ("Bob computes gb and sends it to Carol.",bobSends2) 
print ("Carol computes (gb)c = gbc and sends it to Alice.",carolSends) 
print ("Alice computes (gbc)a = gbca = gabc and uses it as her secret.",aliceComputes) 
print ("Carol computes gc and sends it to Alice.",carolSends2) 
print ("Alice computes (gc)a = gca and sends it to Bob.",aliceSends2) 
print ("Bob computes (gca)b = gcab = gabc and uses it as his 
secret.",bobComputes) 
+0

正如塞爾吉奧說了'POW()'三個參數的功能是遠遠快於冪然後mod。 – zaph

+0

就速度達成一致,我剛纔注意到應該對未來看代碼的人的代碼進行更正。 – drixjoker