Skip to content

Instantly share code, notes, and snippets.

@arsane
Created November 25, 2013 06:37
Show Gist options
  • Save arsane/7637211 to your computer and use it in GitHub Desktop.
Save arsane/7637211 to your computer and use it in GitHub Desktop.
use python to do rsa calculation.
# Simple python script to check each steps of RSA calculation.
# Keys.
n = 0xAA9DE43925350CD9C0F1F98017FFD882BCFE524122212E764C6D529989B4192169B30559BDFA0F6F3037C3FDF54E18D2A36028E1940BEF14A472D50814A1089861B541491E2CA61652012FBC9E381CD744860F22EB4DD4274AF5C87EF5D05BD5040D8BA550A0FA59C1AFF7B354DF565B531B4ECF4DE731F5998F651BE25146E7
ns = 'AA9DE43925350CD9C0F1F98017FFD882BCFE524122212E764C6D529989B4192169B30559BDFA0F6F3037C3FDF54E18D2A36028E1940BEF14A472D50814A1089861B541491E2CA61652012FBC9E381CD744860F22EB4DD4274AF5C87EF5D05BD5040D8BA550A0FA59C1AFF7B354DF565B531B4ECF4DE731F5998F651BE25146E7'
e = 0xEDBE77C1
p = 0xE091BB42189DEA18CF8EE01A2407A6F0DF154C026948CBBE2857584885D60C08E1CD91FB47C35D07E337FF162201BEF10E6D9CBAE975AA086A0E6C6ABD85DE65
q = 0xC27F0DB3D6B798AD36340B56A402467476433A9034953DE611062ECEE87E2A2A46EEFA4900DE013B13191CD0FC84ABFB4CAE01AD22E6F19D4C97AB76CA02455B
dp = 0xDAB58DE689FA09999DBB95EB39367CEF3958A18F5661FCCAFF367137DDBD48CC6E792F7BA6981A42CB52A1B26B9F873D9CEC8A61EFFF6E866580D6B5A0E8EF2D
dq = 0x90790A7CFFA8D59F71329836951E7EC9D78DE6E4AB94F65951C45F1176BF4274894489DA17EE3559D59621EF745E0541888A8B3DD08AAADCABF2A09D5E3775CB
qinv = 0x0CF491F1FEF839FF0E2757ECF345B876EFA0F9934CE37700EA0C5EFDBB945541DC1311D86034A01110C74CCCD0348FE79F62DC76BB0A6BEBE7B21E81F222419B
# http://stackoverflow.com/questions/2392235/calculating-very-large-exponents-in-python
# message
m = 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
mc = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
mc = [elem.encode("hex") for elem in mc]
#print mc
#i = int.from_bytes(mc)
mc = int("0x"+"".join(mc), 0)
print hex(mc)
m = mc
#print hex(i)
print len(ns)*4
print "\np :", hex(p)
print "q :", hex(q)
print "dp :", hex(dp)
print "dq :", hex(dq)
print "\n0. c = pow(m, e, n)"
c = pow(m, e, n)
print hex(c)
print "\n1. pm = c % p"
pm = c % p
print "pm:", hex(pm)
print "\n2. qm = c % q"
qm = c % q
print "qm:", hex(qm)
print "\n3. mp = pow(pm, dp, p)"
mp = pow(pm, dp, p)
print "mp:", hex(mp)
print "\n4. mq = pow(qm, dq, q)"
mq = pow(qm, dq, q)
print "mq:", hex(mq)
print "\n5. mp = (mp - mq) mod p"
mp = (mp - mq) % p
print "mp:", hex(mp)
print "\n6. mp = mp * qInv mod p"
print "mp * qinv:", hex(mp * qinv)
mp = (mp * qinv) % p
print "mp:", hex(mp)
print "\n7. r = mp * q + mq"
r = mp * q + mq
print "rm:", hex(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment