2017-09-22 51 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