ghost423543

RSA-common-modulus

Nov 4th, 2020 (edited)
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | None | 0 0
  1. import base64
  2. from Crypto.PublicKey import RSA
  3. from Crypto.Util import number
  4.  
  5. def egcd(b, n):
  6.     (x0, x1, y0, y1) = (1, 0, 0, 1)
  7.     while n != 0:
  8.         (q, b, n) = (b // n, n, b % n)
  9.         (x0, x1) = (x1, x0 - q * x1)
  10.         (y0, y1) = (y1, y0 - q * y1)
  11.     return (b, x0, y0)
  12.  
  13. if __name__=='__main__':
  14.     pubkey_2='''-----BEGIN PUBLIC KEY-----
  15. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA
  16. Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM
  17. UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP
  18. f19C6goN3bUGrrniwwIDBTy3
  19. -----END PUBLIC KEY-----'''
  20.     pubkey_1 = '''-----BEGIN PUBLIC KEY-----
  21. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA
  22. Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM
  23. UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP
  24. f19C6goN3bUGrrniwwIDAQAB
  25. -----END PUBLIC KEY-----'''
  26.     c1 = base64.b64decode('BzFd4riBUZdFuPCkB3LOh+5iyMImeQ/saFLVD+ca2L8VKSz0+wtTaL55RRpHBAQdl24Fb3XyVg2N9UDcx3slT+vZs7tr03W7oJZxVp3M0ihoCwer3xZNieem8WZQvQvyNP5s5gMT+K6pjB9hDFWWmHzsn7eOYxRJZTIDgxA4k2w=')
  27.     c2 = base64.b64decode('jmVRiKyVPy1CHiYLl8fvpsDAhz8rDa/Ug87ZUXZ//rMBKfcJ5MqZnQbyTJZwSNASnQfgel3J/xJsjlnf8LoChzhgT28qSppjMfWtQvR6mar1GA0Ya1VRHkhggX1RUFA4uzL56X5voi0wZEpJITUXubbujDXHjlAfdLC7BvL/5+w=')
  28.     c1,c2 = int.from_bytes(c1,'big'),int.from_bytes(c2,'big')
  29.     pubkey_1 = RSA.import_key(pubkey_1)
  30.     pubkey_2 = RSA.import_key(pubkey_2)
  31.     ## e diff
  32.     '''
  33.     e1*d1 + phi(n)*k = 1 %(phi(n))
  34.     e2*d2 + phi(n)*k = 1 %(phi(n))
  35.    
  36.     e1*d1 - e2*d2 = 0 %(phi(n))
  37.    
  38.     c1 = pow(m,e1,n); m = pow(m,(e1*d1)%phi(n),n)
  39.     c2 = pow(m,e2,n); m = pow(m,(e2*d2)%phi(n),n)
  40.    
  41.     pow(m,(e1*d1)%phi(n),n) * pow(m,(e2*d2)%phi(n),n)
  42.     pow(m,(e1*d1+e2*d2)%phi(n),n)
  43.    
  44.     e1*a + e2*b = 1 %(phi(n))
  45.     m = pow(m,(e1*a+e2*b)%phi(n),n) == pow(m,1,n)
  46.     '''
  47.     g,a,b = egcd(pubkey_1.e,pubkey_2.e)
  48.     # print(g,a,b)
  49.     m = (pow(c1,a,pubkey_1.n)*pow(number.inverse(c2,pubkey_1.n),-b,pubkey_1.n))%pubkey_1.n
  50.     print(m.to_bytes((m.bit_length()+7)//8,'big'))
  51.     '''
  52.     Yeah man, you got the message. The flag is W311D0n3! and this is a
  53.     padding to have a long text, else it will be easy to decrypt.
  54.     '''
  55.    
Add Comment
Please, Sign In to add comment