2017-09-22 84 views
0

我只有這個,我不知道如何計算私鑰。如何從p,q,d得到公共rsa密鑰

const char* p("11255972776556904264355589361581299560395728872239621233068906405812608921813191755808405540044481084831045609458696035640942585319975255128754117171584651"); 
const char* q("4650473441707994051054607475682163000818993472760435603314465037312588601022012551228891"); 
const char* d("70043748630820478511883011265666731045146072028066310178672809101054479215166107831769673593025767853213311605740951029471462199049707526773053884221428550051565790192707552723439555048621215503776643878462109243202624983405481154406252935541613799894609964410988575108271598180781588706290307870314111895973"); 
+0

你能給我們多一點信息嗎? –

+0

你不知道如何?然後[查看](https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Key_generation)。 –

回答

0

我只有這一點,我不知道如何計算私鑰。

你已經知道的私有密鑰:與RSA,p談論pqd時,q是素數和d是私鑰。

所以,你唯一不知道的就是公鑰。它是(p*q, e),其中e是公開的指數。對於許多RSA庫,e爲3或65537.很容易看出,您沒有爲e選擇這些值中的一個:如果您選擇了這兩個值中的一個,那麼(3*d-1)/((p-1)(q-1))(65537*d-1)/((p-1)(q-1))應該是整數。我用這個online big number calculator計算了這兩個公式,它們不給出整數。所以,你沒有選擇e的常用值之一。

因此,您需要自己計算e,使用extended euclidean algorithm(p-1)(q-1)d作爲輸入。 d的Bézout係數值將爲e。這是一個使用C,C#和Python的算法的示例實現,但不適用於大數字:implementating the extended euclidean algorithm