import six
import rsa
import base64
from rsa import transform, core
class RSAPublicDecrypt(object):
def __init__(self, encrypt_text, pub_key):
self._encrypt_text = encrypt_text
self._pub_string_key = pub_key
self._modulus = None
self._exponent = None
self._pub_rsa_key = None
def _gen_modulus_exponent(self, s):
b_str = base64.b64decode(s)
if len(b_str) < 162:
return False
hex_str = b_str.hex()
m_start = 29 * 2
e_start = 159 * 2
m_len = 128 * 2
e_len = 3 * 2
self._modulus = int(hex_str[m_start:m_start + m_len], 16)
self._exponent = int(hex_str[e_start:e_start + e_len], 16)
def _gen_rsa_pubkey(self):
try:
rsa_pubkey = rsa.PublicKey(self._modulus, self._exponent)
self._pub_rsa_key = rsa_pubkey.save_pkcs1()
except Exception as e:
print('_gen_rsa_pubkey.error: ', e)
raise e
def decode(self):
b64decoded_encrypt_text = self._encrypt_text
public_key = rsa.PublicKey.load_pkcs1(self._pub_rsa_key)
encrypted = transform.bytes2int(b64decoded_encrypt_text)
decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
decrypted_bytes = transform.int2bytes(decrypted)
if len(decrypted_bytes) > 0 and list(six.iterbytes(decrypted_bytes))[0] == 1:
try:
raw_info = decrypted_bytes[decrypted_bytes.find(b'\x00') + 1:]
return raw_info.decode()
except Exception as e:
print('decode.error: ', e)
raise e
def decrypt(self) -> str:
self._gen_modulus_exponent(self._pub_string_key)
self._gen_rsa_pubkey()
ret = self.decode()
return ret
def main():
key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGcsb3NJBOXzRvJ9LUI8KSlqLHgOoqgnWtD8ijshclo9lNzggjXhsR+n4vtpO8+kZkAjSOWawvzj31Ao/IRxd5glaJpKZKofgypfHn2OUNdcAAYruwsGZVFEbJVUqdIcsBIYcvFMVTJDPCpKF0pjpw5VvDRRzaeWSu2A0rHD82EQIDAQAB'
text = 'n5UIi+Lp4iOxamXus3rLxY9FdOIMGOhCn0I0WQdxtheSWruPKaRhnTgtJEgKtHfjgAcgQek9CezutvuVZAQ2fSyHfDCNXpB5eaRKsjQKYAxqo2vseB2Sj6bwfatS1BuJjq5lDDUXgb/wqJYCkngvUVMiK1+jFTCuKwdx18mrLPU=Oa6N9K4pXZfxs8efzQ87ucoFtmBDB1xlQ.qElgRcAe5eOxI7+Sc5qjy2RD4ror4L2qmomaFI3dC671MkwPRss9QUhRAlIo8P1Ja+ggNAOSNTaUeJYaCsOnuPLAYD9YizjyiosbthA1mNvHyVShmCWMCir0bYIxurklMgMfVCTDuKPJAn53nld4sp2EF+7wmr8tFN5MM2WSqCT.UQ97X6XshbyYMFLKOlfPF7vsCD1grF.HJy90mmbko21CVyELhyV3923Sv7G3dTguLmMcdG5mnP1O0QDkFsmB1PYqqpEuffix74HPgBXu5kSxEgZJ4q46dJOb00NXujT.91xd+tlkONHhXM2tL.ap6xtqF9I2blH7GLJrHMYNtibKzpkkGvway39U2O5ZkBCgo+.bh0z.yuiktWmjAZIhgucSm78yvXxGGa2251ZuTHSDoZuTWuV5+B5MZPWmD6N+Ub7aZ2vE6Y6T6eAJ.pdIZe7Mgcw8GCsjKVtZEbr5RR7enAWJ2NS6fOLBd101eldKfNYwOuYUo21CVyELhyVlXLP81LGjpMba38P6iLCU4ciafU.AqJraG0rRmp.C6DlFJ.zHiF2jyT3BF6wgzeMzdRuJgEm42SgUEiinKsE2rgFEcV9nj07Nm9GgKP6iabWo.GyVqayDWGRzBhxkwrKsBp8jmYqnzSk6hUD1Ra.4kB0vauU.vwe6E.ahWjKaFRUzqTiEQeznMjdhlHI9cHxD1jtm5hVoGH1DN3XHaUJ4kB0vauU.vw6fmX4OLxYh6rrKFaEoA6mWKDrSo6SIapGg16LAYgQNNtbCj0Xuj3IC61ecjuq69asWTbjFuE18vC+B6U0ZloGa.nxincq6PuurRTz7r6myjywvDiv55S8wGOFj6CtcJYwFNvP3M48ILcsmWL4wNbDBYQiXKyGQOKFkNGkhWvxuqhJFnrjyInb7evKU7aT7U.9YixNi2vWyatLYGayQxFeidaNpE2A6esXoYBOIKpjw9WHw6hAnhlrvuCphXHVYKCMGgvY0BICzmkO8RhA0OmwcFFeTRGzgTmIeh6HHybnNVBGLrA5SlGBwuxgsi41ZoSc+1LeS4A13Yo6rU3wJ3qOJwrIbYlbCam23dIasVHPXKeT850y4jXE9Lg55C5spdMkD1mCwZFHy0wG+FNP3sJfU39AER2xN1haxvVy9i.ckzTonPuEq3FW9eyapFT9ziDNCIqeM9LBtwHj2dHHkV+zTVRjbhSaq0d7fGdTeIEsBUjZMtr6AnyzhMramY8MVZXO1cRSQTP.b15cSk1jzRYBdKBuUs42.u5lLV7U.ufgacpaBASNPA+uhYzngJf4s2cn0ziqSqcv+hYoHEgG.OkqzRQaO6u4L0fsmvTu2+Uk9mxJSnSvJjuCTm2YIPg8Sfm7wUi.7ya.nndLtyqe67QGDvmi34GPC1CkIoQ5.0mL8Uy5OMeH.nERgkA4hsN9WW8fbYFIxYUAOPl4AO5N6ImjcTWyUYMmaTl7W461xyiH9OFjeSP3rohaa.nxincq6PuaN97oVtMV.gnaNahypj+qKtt+XtJpjSXr6bH0Oq2zgnuTboZV5x.SPqlBiM4TKAQM03IPxUrtqPxH8KYhUjE910H4H+vDnT3Q0vyzdOY5isarjYKGPVynjJl.XE1zMm7JDn6gYA6SXksU+ZSeWA4zSNOst0WMnXbFFEUZSg7HyvHs5MJt.oEF4wI033koYf9v2dWqLY+ALdgX5Pl1Yh1KkpU38lRjc5mti3dlpw...KSOMqGcGtxob8rYQ3rZHP0PUxX1ZVZw16vjkgfO19bEKRweNSniXXKHtgcxCcUhLXJYNnLoRNruJ3ynEAVHGZlsQ4JX.Ozl72bAUTEfq3AnXKsJJ2ff6QzZQmI4uG2935wZcrlqz2c0ruuXF8329b8bUytoBhg5eYv19zQp+Scgf9HEiii587kDl0fNVIVx6mYJ4Lkyohct1fUVtCzwSklK8PL5udwqv5ezKYhFuiBCdPm90bAMG+IbfR4t2vTmL9yKkElHSnwV6nmDQUXzxXwg1TBLFTQOi8kj1OtzMDXxaar7gE9YJ0G3BtKLq990j55GAeCwGl7KDg8RHq3lf1ncaNb5hdSLVB0iScd.Xj0ONTBqCFU046WL4Qy8PxEFeFZnrPF5O16ly3aysVIp+2ggtalCzfmyrSlsgHt7sfQGKw5ljUV+qCGlmmxUFmQ7J1hk6U3U2X61gGqbKNVZ+pdZVWJjfaosSZ6Pk5LY04Fwmni7kM.9vE7KW6W63g1SBafgzXO6izS1qg5xAc5hNv1jssr3f7zAvQbpeYyIBdB9Fp0s5S0BynBCGxyb5aR8vGZWX6fW0WGwacMptnrpbq2+7bfm93Ne5UZAZk2pXa444w1KFqlHlwmy2mUHGLYRlKikgfNMYO17RwBhICvoezHNMlQ6tRf4+3oXKPynRmaZWvkWzw9lkfLArlRy.0BzqZWQLqW9dK2O746qYvCY+KoWTOiHDZgldpSm8HgDZEbmQFrjtsBlSe7eIGOmPeZAuw8q23j9GdfBnl9XI3mCzAsO3eVu1hW6c3JAIAfcWZ238wAFQWT3TTRNYMVlQzyU+M+g78GUgU+ZnPmseYVS9AQ9kRtKEvqcUXhQxVJGwGpGb1NCrBF+yspJ7t7c+a.l+Xe4ibj1NNM4WQ+uKIIZHFXVwBoKElEVX9UHEPtH+t2p6f6+Jta3bLoYzWsK2Yb2lGHzVLXxGHLeDvgX3MnqwoQQOnJnqS8OdZXAGgoSURVfxE3mukCcGToucjDHvrjWugan93vFKm5GiSv34mlViz17ywrHAa9xREXdbcOVkfF+q3gpN.OuSFPGIqkAps6aEUG.fsGi2qqf3WkdncvduXQ+Knu2slaHxUjTrLdFjJ124r+KBgh0RIuBPkJCdoZV8rDQB..TcebN6OWX06xxkvcGVH5fOoV9kAOlY0+YIq6iaHcCdjb9aJxGLVB6YvFUyRNI9JnRtSD4Ru.0tyU3SiEiH6HZL5iaZFYXCNGAA0oefMFy9U23uVnRjeyqC0KKGfqZLBzCRNfYgBkkJ4wTptOxYS6YqDkgumcwA82++8t6oyvyDMbxLgAF0b1QStkrhYPG3a2FpqDU7r9FS4m6YhUhFoDgabsFXsac7pVwJGR4Y0Q51PxCYS+lIpK2C1UACPxH8KYhUjE9wpCA4SusZYIrbokRiQ+pLZvzcmR2s1nGR0pppqaAdHPuNc5dPOVWmicFMPYbZTsdx5QB9PKLlY4qsMLj3T1lLT+iTXVvkOY6x7YHMQnFIS1WBntu.tGwrnLUjK1V.vAj6vZZ2C8ZH05iwJwH4ecWfalGs8WzhfVHPxWqdVeZeO+3HkH.YD8nxxz4VsOft4Vqag6BTrbg0y8JktXZFWl0eSSOj3HGAllqoVWu+F35JUcIIabJFqWq7MC6byuOPWGSeHhn+yp9zj.w4fMwfsZVHT2mzZWNYZGPlqSD11CNcj7m7Vwz4fHFZ042Va8ITNVc3ifQP3QCsOHIy8bztPj0CN8jfCrdH9L0Jb532v1CQ0JXTUxr7xNq4uIXMlZ7RAK2jKkYVW3Qph7DLzHYXBBQhel65vA5ImuRfemDF0TM+9nx4X6+4A4zwA2cAEVpWJ4+SaA4845VO7bz7xD96XM1aPiMLdW+CJyC+byBkhfBPH4wsncXMnJaQQJPmlgg8aNjKF3bSTzQRjA+gGAO1jLUEQdqQk6SPHU9psBRMR+rcCdcLlMmRPt4i.CLW4zSNPL+rf33.kdK4k5P6NltMeQ.f4ivfy65eR7WC9AFzYctq9HEgp.9xPs80FOh1vab2vaxZQhnfPew571ad8cHIgs1s0SIy1Ysl21DbvCT5eOiQNdEgp.9xPs80GA8lw1dX.MULpiVCLs0DMHsc3oekfNdIIAMrS42SNjD5cT4eQiiQNLQRQ9q52X0EaUIZ3z3sOe9bTYXEya+MHmQqoGQWOHKX1+RE79t.v.IZi2PUMEP6fbP6NltMeQ.f77VrlqEFzfBStIjhzIjRlX4GsRDvgpCe2XE+HkIokDSwfBuwrbjFkulCGd897DnvWvu4j2t0s23FIGQC3QDGl5uHSwckwJH87F+FM+siJkWvNnmha8Cw48ZIG+I+F4BaCUtqyLGEzUr+FZgQt6ykP+lFpIWEV60YDczsA24ZtiQD+jZbTHkP3+9Qrc1aHgyUu3WBrQd+nrVGi3BviJT93gv4jW9wWvdqfhX1ZIDkCUMKSn9gJxFG5h2NXIUs2xdBaF8vrSPRom5qHAx0xgjek3DTU7fZ0+WiFg7BMa9aw+jXrjKG+i0C.1oekRHuHXYkfMA8fH4GtPqkNmdf9gFhQ764LmEMa9gUFtVPQ8FY.QRKSfzV7NSKLI86m+culGo8WIhlTQkmoXJBvzOdibYnUIWccRR3s8M1ptlqHIV2NmWPa6fbTfwfM.5NjpiJwNHKLwpbN0w2M2YMCUXbGNovycVQM1l4HhHh+E.z0J.YORSMIOFzc9njrzZIwqxz2lKTXy3AVGxpbL8OAPuqNr.SJLcvVoiQ3sJrRTCvZk41pzy1kKpM6eiPdMYwIUw2JkafirSACUZpVq2zapauCNQL6KL8n3Y5QeMdQjI7VvjAHMTJSQC0O4i.gYIyO1b4wBzEyVBj1nmJSmqWBj6fUkG+DHtmuZyafjgVbNMmx0LR9RSOoDiLAbpxkQpmj.7rpIhQQBy5mF.1Za387HWRGrFHen7aOjzR8VNBAkE2wbfKq+lkF2sncpFhyYXr701sOMl913dOX+oJ8gaysIIcXrt9+Dr5ARirkYoRAN8BbpkH2XV3cGiezhth2nLIv+t1xF47W67NPNc8VL+uiLecamx2jbrkZ463JPzzxzqwCFE7ndH+ebikcyi36Bp270dud4c.EmH1gjPYtSG.iDdyCQpmJFx3tiBmX+fyrDoEoR9eFLvcQhnJimSTzFEgwGCh6EROFBche5QuaBrPGpVdXHgfPOFkVQvdLqSyVXJQXvofMi2m2l1EnKG7gQMxWs9.pCeolqwLl7BFDqZH0JWFizWL1FBKWiary2VvdX1FbQs8EpJSvDy+bncKr+hIos4+LqpsX0Z2dmFdPoBh0KC8423ihljYjf5KL2QQhYVxAmcaJ0YtshHhSbn0k8UKCB94yuMXXJ6lLhIDMM2ZWf.PVUxr1An20mtxanh8pHG9QD53gMmcyQWg6faVArb.ZTYEgO6mqIqkLtUa62rBW3rjWfjafL2m5VMgIIh7kzJ1pwVOJZ6u6Sh3lCPJEyFJ6dr4cfNioXERcX4lPM3DsQN+EPNEeaLaRZEMwHgRsQLiLk7hCuI47KFc5pj5XLa+3viKrbAORzuU1UF2ir7T8+DcWhtRtob.ZTYEgO6mpv+ZafkUKFtLiczgZyUiZ7uBmfID+WaUSPNBcwTwwwqHJPQGJsXmDykbU8ih0uUwPNBCJDAo5wHl.pSo31LvaGwi59F.Z1gxQyWmQPwn5BMF0KbGH0.M7WiKLDSA8WYFFxqWcN0d+Udd3+Lq3GxWIgqyLSBcideS4rLiiZWiIEucE7AmRQSs.r6C7UO0dIyuSwNFIHmNqY+mL2FZcxVv71nHZUlodTOmFWowMXrm5Du7nfNjf1EhhRz1VJtJ69aDSaVkEzjiMV8GWimns1tvLKHxVSTJ14AtYdqQk6SPHU9r44uD.WnDmOqL7xYXHFCWV+BLg8NRWDTdD8sGCHN9GFq4MWlUvmGPdTsaDmZjye02mQ+VT3BQvPeLMeSlrtG+yrgxaVS+YY95FqbM28ZQmfOIRsj9l5nHt5IyRSW1AHph87TKojp0wgegKjd889TYzqRJUTOEa7V471+VFwlJSmvZa.c2tkHQV9uulUPXseE2O4wF7M7EL5CBo6DvvLZt8mAV8Pbh47EMf4qVmlBfjmEMyPobZJIPMYPmMTt+4P.h8VUkydeALW1LoeAQst3Ooge+QENWQd8at.c7jFLS+Tx.ipWaUF+OYQzI+htkkg8wkDvXEpH.5tnHZUlodTOmHOMe33QqL8zvUBkYQFNheVWtS2gXs9NQKaVkEzjiMV8H4sd4Xb0SjGq4MWlUvmGPcbFzcwcjzoT1bP4o7hBw9J3An2R.fDk9WrgxaVS+YY90qY5D9vg0.T9i1Wl1ZvioM.o2W0x5D9.or+KBgh0RIuiLlG4WLEtHAT2bnaW+Wbag6vsXK66Kh.q4MWlUvmGPfQ.TQkhxXe2fYtVpdWb4qDP6NltMeQ.f6hlFqCbsheJPAMIiAW0lQhOAFsr1HSclCFZaIYIZeCqgrrHsdyQ8MTq+HOmZPWU3+XQiK5Msv6tKAFdMtL4IsXtkJwtmU6OlpAdPeiXPu39LyiG0heVKd3sYbN.hgPpsv.nhg5QtcaON3tKDS2ZwI4x2HV3znAAXf6vBW.JzFdBiuj9GVKJOLkbBE0TcLlHzk6rxzmKfuY3evPVMrudd0QFsAYSAc4SWzm1jwgk59aCSUzPR67K0bLSNW4oq4KU7y2s4iJVOcHIF1Y31+m5XnPJ1zJYD+jgI2292IjumJav28DdWGOLZG7Joo.ncR+h+Jy88dT7tW+rxKJtNrWbknPcgbtEeGZKgvO4v5RagwJ+N3tKDS2ZwI4x2HV3znAAXf6vBW.JzFdBiuj9GVKJOLkbBE0TcLlHzk6rxzmKfuY3RsmzE2XbgE5q3SRO6400KEkS90iZkQgk8UaG8S3MpSq0wr6Ybzjxq3RPzl2udYt.jrWv.9nec1HIo0U1txi1CzLo6.XTIqH2uWEdM5VY3hzgZ+nmZb+rC0t2NRWQyCzfkR00nRvYXGldg2nVRYIxBu2kPbtNn+rmpE8ox4aRYt8A49YBcFo4eLRPzl2udYt.sujr9dMiofaBEpSjawgBzlD+SiGjaTaTBSJDx.jOUj7Q.koho2k2kxxFb1+myyHOeQkfn19TC5RuWztTRQ.ctsx7GueyYT3g.a6fbTfwfM.5NjpiJwNHKLwpbN0w2M2YMCUXbGNovyce3IxMowqKnEiuWMr2JZxu3wMHG6gNXrNv79z7ImenTYjwPfM2ej6WtZltMOsm0mXLLwTv1rqhipfDzCrxLP2TubfGLLgXunu4pr0nzKAFB2OtukwDJhvv3Gp0RVeXEcbhBgX1CPY5jcnA3EZpAG+efYZaGFewNTUqeePjXWem7A3JWJUlliEdG3P2xYuBvfDa+ioLG9jtUqVl6L9NgTNOD93jBWBnDnTYsNFgzhvtdkfQBNLL+jGZGMY1iQ.dG3Xi76xd+p6PJvhPcggRXPQJUAqsg6QZ1M5n3w.FuyNAIjcZawsHvIENiXeNz0MVtMjBmgJJSo0d2nFQT2llBbrOp96jxOGWultufGYyB7JpWpHp4i.LqmUaYOm4gJHoH8S9mokKl4nKv3oD.yyOXSfWGRmLewMz16+F5u6Tc3cdUJwuaGapUNrDhXP4XLYCmtOP6NltMeQ.f6q+kwPO3gA2irlfa4OhWEEZVmx5el51EA2Qqp20gNpZjOKI45L2QNek+1OQd5eYn29kLs1xBVo7GVHEE3qksPHIeh6HHybnNUVt9dIvMZrxvnYBzBUGYT+M+eK1phjDFMIk2kYfEy9DDH7ma2Qae7CoBIofsWi5kpoEyNs0jsB.Gp2RRIpSXvrhdDBWTjlpKTqsYdUDaW7qBdBj3tbGMaCGiauPPNlHgR3z7+TvuQTLsCjvV+BNl+xwLcvsRxpJYtQQI0RcTivAuO9dUK0cYxzGMzwg9QBV02M1xJDdYZR4BOwEwnIfbvwbpD9yt5Rrd2GyTNFVNkYdGB.EIZQiInObkSUNbBxFYBgaMoRZf5xATndbEL7uzKWuTZkfDZX747dY90MMHP0ZX+pjEn8.56Ud.k0z6dMg2Sk7m4119FzsCA5HFD9wAJ9WdA4jEa5y7kQZxFl.RfH8K5QfFOVFuiRaxdR1iFpTIe6MISL9nOixTr6AjYKVv78A5IQQwTyUa5Z0DiMRrnLuRR0h2Zt2UpM9rp9tN.B8z.k2OmInA0covCls3TDYzZgqGOQFd8hBuBNvuxYd7Mk1kqhodp5hLyNCS3fXn7+Pefu0+P7CtBiQ3RZ0OoD95zxhBgX1CPY5jfD9IIuwTixe3PIJMcQ1L+Lvc5ikGk73ccQaQHdfjM0WisOBBTKoSgZ37IKOyNUWgclUwYtPPn8bkUHqPEA1i3hmq05Fn8urA3OtrJob3zpVMbKGPPPMICiM+gkVtBZY6n5GYhmO7D2xWYQvzGbzi4blUgy9MiSWl4mREic3MX56Ujllk7W2HbRWqiQXQUoLSzMABUFk9000TWDFZUM8lPjFI9A72FvVGz+PQbfzfNqHGYQvzGbzi4bcVZTLUTPJTZ9K1tk4CR.SYIu59KaMvZEFdPYktG3n4N1wnWIyngZbxP+U7lDizDZ7YIhoei+L0IWYGLa5ElvljiZnw3u8SXIPz4NxaG1G2hv9lNgSA7qaj8mRuENEQN4JKr914go6qnPWRUTF5IWLPRWz61aLeuZDFgymonTRTQWltgzkH8gJH637r5wDRoOgosBlhdzHO+Ckqi4h.NPEzwi388PGWmcuPJoBHrU2fdvgi35DI8OOLpMy4aWZajzLHYYjyV9TUEUEvM2Qt1Rt1GseoTJfGlf1ZjMToVYwavWsn1LE7UWa7Qy6l39T4MLnJe91hF7Jr7GaJX09fZfygd2+Dz47JM+b.ZTYEgO6mphYREx+.FGkDFu4p8HQNyso0irSXnD.YoyRES7Olm4GplEayhOlOqaVWGL+LCxPtPtawBHkvYfyPdZH7kLUBn5o4ys1OycLEAC03yGH5OyjZnts9tjOx3qPCXSuUvrPRk.o2W0x5D9.nt4gnYh+7XGEpMgK+7smRuL11Rgyz0Vaw==ZTczNmJkZm'
text1 = text[:172]
decoded = base64.b64decode(text1.encode())
rsa_res = RSAPublicDecrypt(decoded, key).decrypt()
print(rsa_res)
if __name__ == '__main__':
main()