You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.5 KiB
201 lines
6.5 KiB
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
|
|
|