import base64 import ctypes import urllib.parse def _32bit(number): return ctypes.c_int(number).value def _zero_fill_right_shift(val, n): val = _32bit(val) n = _32bit(n) return _32bit(val >> n) if val >= 0 else _32bit((val + 0x100000000) >> n) def hex_md5(a): return binl2hex(core_md5(str2binl(a), len(a) * 8)) def core_md5(p, k): p = p + [0] * 1000 p[k >> 5] |= 128 << ((k) % 32) p[(_zero_fill_right_shift(k + 64, 9) << 4) + 14] = k plen = ((_zero_fill_right_shift(k + 64, 9) << 4) + 14) + 1 o = 1732584193 n = -271733879 m = -1732584194 l = 271733878 for g in range(0, plen, 16): j = o h = n f = m e = l o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936) l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586) m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819) n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330) o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897) l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426) m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341) n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983) o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416) l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417) m = md5_ff(m, l, o, n, p[g + 10], 17, -42063) n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162) o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682) l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101) m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290) n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329) o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510) l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632) m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713) n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302) o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691) l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083) m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335) n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848) o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438) l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690) m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961) n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501) o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467) l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784) m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473) n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734) o = md5_hh(o, n, m, l, p[g + 5], 4, -378558) l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463) m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562) n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556) o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060) l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353) m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632) n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640) o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174) l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222) m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979) n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189) o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487) l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835) m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520) n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651) o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844) l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415) m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905) n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055) o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571) l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606) m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523) n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799) o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359) l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744) m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380) n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649) o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070) l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379) m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259) n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551) o = safe_add(o, j) n = safe_add(n, h) m = safe_add(m, f) l = safe_add(l, e) return [o, n, m, l] def md5_cmn(h, e, d, c, g, f): h = _32bit(h) e = _32bit(e) d = _32bit(d) c = _32bit(c) g = _32bit(g) f = _32bit(f) return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d) def md5_ff(g, f, k, j, e, i, h): g = _32bit(g) f = _32bit(f) k = _32bit(k) j = _32bit(j) e = _32bit(e) i = _32bit(i) h = _32bit(h) return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) def md5_gg(g, f, k, j, e, i, h): g = _32bit(g) f = _32bit(f) k = _32bit(k) j = _32bit(j) e = _32bit(e) i = _32bit(i) h = _32bit(h) return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) def md5_hh(g, f, k, j, e, i, h): g = _32bit(g) f = _32bit(f) k = _32bit(k) j = _32bit(j) e = _32bit(e) i = _32bit(i) h = _32bit(h) return md5_cmn(f ^ k ^ j, g, f, e, i, h) def md5_ii(g, f, k, j, e, i, h): g = _32bit(g) f = _32bit(f) k = _32bit(k) j = _32bit(j) e = _32bit(e) i = _32bit(i) h = _32bit(h) return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) def safe_add(a, d): a = _32bit(a) d = _32bit(d) c = _32bit(_32bit(a & 65535) + _32bit(d & 65535)) b = _32bit(_32bit(a >> 16) + _32bit(d >> 16) + _32bit(c >> 16)) return _32bit(_32bit(b << 16) | _32bit(c & 65535)) def bit_rol(a, b): return _32bit(_32bit(a << b) | _32bit(_zero_fill_right_shift(a, 32 - b))) def str2binl(d): c = [None] * 1000 a = (1 << 8) - 1 for b in range(0, len(d) * 8, 8): if c[b >> 5] == None: c[b >> 5] = 0 c[b >> 5] |= (ord(d[int(b / 8)]) & a) << (b % 32) return [s for s in c if s != None] def binl2hex(c): b = "0123456789abcdef" d = "" for a in range(0, len(c) * 4): d += ( b[int(((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15))] + b[int(((c[a >> 2] >> ((a % 4) * 8)) & 15))] ) return d def Base64Encoding(s): return base64.b64encode(s.encode("UTF-8")).decode("UTF-8") def get_cookie(username, password): password = hex_md5(password) auth = "Basic " + Base64Encoding(username + ":" + password) cookie = "Authorization=" + urllib.parse.quote(auth) return cookie