1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| key = '345y'
def check(encoded, keyValue): b = encoded.encode() k = keyValue.encode() r0 = r1= r2 = r3 = 0 for i in range(0, len(b) - 4): r0 = b[i] r1 = b[i+1] r2 = b[i+2] r3 = b[i+3] b[i+0] = r2 ^ ((r0 >> 4 + k[0]) & 0xff) b[i+1] = r3 ^ ((r1 >> 2 + k[1]) & 0xff) b[i+2] = r0 ^ k[2] b[i+3] = r1 ^ k[3] k = k[1:]+ k[0] return b == [88, 35, 88, 225, 7, 201, 57, 94, 77, 56, 75, 168, 72, 218, 64, 91, 16, 101, 32, 207, 73, 130, 74, 128, 76, 201, 16, 248, 41, 205, 103, 84, 91, 99, 79, 202, 22, 131, 63, 255, 20, 16]
def decode(): b = [88, 35, 88, 225, 7, 201, 57, 94, 77, 56, 75, 168, 72, 218, 64, 91, 16, 101, 32, 207, 73, 130, 74, 128, 76, 201, 16, 248, 41, 205, 103, 84, 91, 99, 79, 202, 22, 131, 63, 255, 20, 16] keys = [[51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51], [53, 121, 51, 52], [121, 51, 52, 53], [51, 52, 53, 121], [52, 53, 121, 51]] for i in range(len(b) - 4 - 1, -1, -1): k = keys[i] r1 = b[i+3] ^ k[3] r0 = b[i+2] ^ k[2] r3 = b[i+1] ^ (((r1 >> 2) + k[1]) & 0xff) r2 = b[i+0] ^ (((r0 >> 4) + k[0]) & 0xff) b[i] = r0 b[i+1] = r1 b[i+2] = r2 b[i+3] = r3 print(''.join(list(map(chr, b)))) decode()
|