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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <stdio.h> #include <stdint.h> #define DELTA 0x21524111 #define MX (((z>>5^y<<3) + (y>>3^z<<2)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
void btea(uint32_t *v, int n, uint32_t const key[4]) { uint32_t y, z, sum; unsigned p, rounds, e; if (n > 1) { rounds = 6 + 52 / n; sum = (-rounds)*DELTA; z = v[n - 1]; do { e = (sum >> 2) & 3; for (p = n-1; p >0; p--) { y = v[p + 1]; z = v[p] -= MX; } y = v[0]; z = v[n - 1] -= MX; sum += DELTA; } while (--rounds); } else if (n < -1) { n = -n; rounds = 6 + 52 / n; sum = (-rounds) * DELTA; y = v[0]; do { e = (sum >> 2) & 3; for (p = n - 1; p > 0; p--) { z = v[p - 1]; y = v[p] -= MX; } z = v[n - 1]; y = v[0] -= MX; sum += DELTA; } while (--rounds); } }
int main() { uint32_t v[12] = {0x8C12D3DF, 0x5F4C4137, 0x1A9D3D02, 0x2D1294B7, 0xFB622B37, 0xD18D84E3, 0x064C4592, 0x16985CAB, 0xFDB06D69,0xFB30B1E3,0x925C2FD3,0x2E1BB40C}; uint32_t const k[4] = {0x776F656D, 0x6F656D7E, 0x65747E77, 0x7E7E7E61}; int n = 12; btea(v, -n, k); for (int i = 0; i < 12; i ++) { printf("%x,", v[i]&0xff); printf("%x,", v[i] >> 8 & 0xff); printf("%x,", v[i] >> 16 & 0xff); printf("%x,", v[i] >> 24 & 0xff); } printf("\n");
return 0; } import base64 def rc4(data, key): S = list(range(256)) j = 0 out = []
for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256 S[i], S[j] = S[j], S[i]
i = j = 0 for char in data: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] out.append(char ^ S[(S[i] + S[j]) % 256])
return bytes(out)
data = bytes([113, 71, 105, 111, 84, 56, 107, 115, 98, 118, 72, 105, 102, 105, 111, 77, 89, 100, 113, 47, 104, 66, 115, 112, 82, 76, 52, 67, 82, 122, 70, 86, 79, 47, 89, 98, 103, 78, 89, 100, 67, 103, 61, 61, 10, 0, 0, 0]) key = b'rc4k4y'
data=base64.b64decode(data) decrypted = rc4(data, key) print(decrypted)
|