RSA私钥计算[MADLIB]

时间:2018-10-27 18:35:43

标签: encryption cryptography rsa private-key

如何计算私钥(d)? 问题是d(私钥)必须是一个整数,但是我一直在获取d = 0.0000152585 ..请帮忙吗?

p=92092076805892533739724722602668675840671093008520241548191914215399824020372076186460768206814914423802230398410980218741906960527104568970225804374404612617736579286959865287226538692911376507934256844456333236362669879347073756238894784951597211105734179388300051579994253565459304743059533646753003894559

q=97846775312392801037224396977012615848433199640105786119757047098757998273009741128821931277074555731813289423891389911801250326299324018557072727051765547115514791337578758859803890173153277252326496062476389498019821358465433398338364421624871010292162533041884897182597065662521825095949253625730631876637

e=65537

n=9010912747277787249738727439840427055736519196538871349093408340706668231808840540195374015916168031416186859836416053338250477003776576736854137538279810042409758765948034443613881324504120707334213544491046703922409406729564516371394804946909037646047891880347940067132730874804943893719672960932378043325067514786209219718314429979032869544980643978919561908707109629612202311323626173343456843249212057093980583352634168733656443959925428846968193413110401346035535595817965624054783296380268863401241570313602685481219583686719199499297832165308522137209299081956650614940546284136240753995440003473611843518083

ϕ(n)=9010912747277787249738727439840427055736519196538871349093408340706668231808840540195374015916168031416186859836416053338250477003776576736854137538279810042409758765948034443613881324504120707334213544491046703922409406729564516371394804946909037646047891880347940067132730874804943893719672960932378043324975422709403327184574705256430200869139972885911041667158917715396802487303254097156996075042397142670178352954223188514914536999398324277997967608735996733417799016531005758767556757687357486893307313469146352244856913807372125743058937380356924926103564902568350563360552030570781449252380469826858839623524

所以用公式:

d = e -1 mod ϕ(n)

我不断收到0.0000152585。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

根据fips.186-4标准,您必须在RSA中使用λnotφ;

λ(n)=lcm(p−1,q−1)

要计算d= e-1 mod λ(n),您必须使用extendedGCD算法。

找到满足Bezout Identity的x和y

e x + λ(n) y = gcd(e,λ(n))
e x -1 = (-y)λ(n)

取模λ(n)

e x ≡ 1 mod λ(n)

答案 1 :(得分:1)

您需要使用模块化乘法反函数,而不是反函数。 这是使用cryptography模块的python示例。

from cryptography.hazmat.primitives.asymmetric.rsa import _modinv

p=92092076805892533739724722602668675840671093008520241548191914215399824020372076186460768206814914423802230398410980218741906960527104568970225804374404612617736579286959865287226538692911376507934256844456333236362669879347073756238894784951597211105734179388300051579994253565459304743059533646753003894559
q=97846775312392801037224396977012615848433199640105786119757047098757998273009741128821931277074555731813289423891389911801250326299324018557072727051765547115514791337578758859803890173153277252326496062476389498019821358465433398338364421624871010292162533041884897182597065662521825095949253625730631876637
e=65537

phi = (p-1) * (q-1)
d = _modinv(e, phi)

print(d)              #  1405046269503207469140791548403639533127416416214210694972085079171787580463776820425965898174272870486015739516125786182821637006600742140682552321645503743280670839819078749092730110549881891271317396450158021688253989767145578723458252769465545504142139663476747479225923933192421405464414574786272963741656223941750084051228611576708609346787101088759062724389874160693008783334605903142528824559223515203978707969795087506678894006628296743079886244349469131831225757926844843554897638786146036869572653204735650843186722732736888918789379054050122205253165705085538743651258400390580971043144644984654914856729
print((e * d) % phi)  #  1

您可以在此处找到_modinv()的实现。

相关问题