Hello, this library can be used to encrypt/decrypt GET request data for the GTS.
Usage:
Decoding: decode_data('base64datahere')
Example: decode_data('SjssYIjyfd2vGH2HWtK70g==')
Encoding: encode_data('hexdatahere')
Example: encode_data('39300000010001010A000700')
Instead of inputting 0x39 for example, you would input 39 (leave out the 0x)
So: 0x39 = 39, 0x30 = 30, 0x00, 0x01
Put them together and you get 39300001, and you would input this into the encoder.
Credits:Code:import hashlib from base64 import * from binascii import * from array import array def decode_data(data): b64dec = urlsafe_b64decode(data) data_ar = array('B') data_ar.fromstring(b64dec) checksum = (eval('0x' + hexlify(data_ar[0:4]))) ^ 0x4a3b2c1d dec = data_ar[4:len(data_ar)] out = array('B') rng = checksum | (checksum << 16) & 0x7fffffff for i in range(len(dec)): rng = (rng * 0x45 + 0x1111) & 0x7fffffff key = (rng >> 16) & 0xff out.append((dec[i] ^ key) & 0xff) return hexlify(out.tostring()) def calcchk(data): check = 0 data_chr = [data[x:x+2] for x in xrange(0,len(data),2)] data_r = array('B') for x in data_chr: data_r.append(eval('0x'+x+'')) for x in data_r: check = check + x return check def encode_data(data): chk = calcchk(data) appendchk = hex(chk ^ 0x4a3b2c1d)[2:] data_chr = [data[x:x+2] for x in xrange(0,len(data),2)] data_ar = array('B') out = array('B') for x in data_chr: data_ar.append(eval('0x'+x+'')) rng = chk | (chk << 16) & 0x7fffffff for i in range(len(data_ar)): rng = (rng * 0x45 + 0x1111) & 0x7fffffff key = (rng >> 16) & 0xff out.append((data_ar[i] ^ key) & 0xff) outstring = "".join(out.tostring()) outstr = unhexlify(appendchk) + outstring return urlsafe_b64encode(outstr)
ProjectPokemon - GTS Protocol info
Bookmarks