我只有这个,我不知道如何计算私钥。
const char* p("11255972776556904264355589361581299560395728872239621233068906405812608921813191755808405540044481084831045609458696035640942585319975255128754117171584651");
const char* q("7289733069892282545374975427138985921459336460098199998353496532104650473441707994051054607475682163000818993472760435603314465037312588601022012551228891");
const char* d("70043748630820478511883011265666731045146072028066310178672809101054479215166107831769673593025767853213311605740951029471462199049707526773053884221428550051565790192707552723439555048621215503776643878462109243202624983405481154406252935541613799894609964410988575108271598180781588706290307870314111895973");
答案 0 :(得分:0)
我只有这个,我不知道如何计算私钥。
您已经知道私钥:在使用RSA谈论p
,q
和d
时,p
,q
是素数,{ {1}}是私钥。
所以,你唯一不知道的是公钥。它是d
,(p*q, e)
是公共指数。对于许多RSA库,e
为3或65537.很容易看出您没有为e
选择其中一个值:如果您选择了这两个值中的一个,则e
1}}或(3*d-1) / ((p-1)(q-1))
将是一个整数。我用这个online big number calculator计算了这两个公式,它们没有给出整数。因此,您没有为(65537*d-1) / ((p-1)(q-1))
选择一个常用值。
因此,您需要自己使用extended euclidean algorithm并e
和e
作为输入来计算(p-1)(q-1)
。 d
的Bézout系数值为d
。以下是使用C,C#和Python的此算法的示例实现,但不适用于大数字:implementating the extended euclidean algorithm。