3 #define XXTEA_MX (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z)
4 #define XXTEA_DELTA 0x9E3779B9
8 static const char *
base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
15 return isalnum(c) || (c ==
'+') || (c ==
'/');
33 unsigned char char_array_3[3], char_array_4[4];
37 char_array_3[i++] = *(bytes++);
40 char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
41 char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
42 char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
43 char_array_4[3] = char_array_3[2] & 0x3F;
45 for(i = 0; i < 4; ++i)
55 for(j = i; j < 3; ++j)
57 char_array_3[j] =
'\0';
60 char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
61 char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
62 char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
63 char_array_4[3] = char_array_3[2] & 0x3F;
65 for(j = 0; j < i + 1; ++j)
81 int length = bytes.length();
82 int i = 0, j = 0, in = 0;
83 unsigned char char_array_4[4], char_array_3[3];
88 while(length-- && (bytes[in] !=
'=') &&
isBase64(bytes[in]))
90 char_array_4[i++] = bytes[in]; in++;
93 for(i = 0; i < 4; ++i)
95 char_array_4[i] = container.find(char_array_4[i]);
98 char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
99 char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
100 char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
102 for(i = 0; i < 3; ++i)
104 ret += char_array_3[i];
112 for(j = i; j < 4; ++j)
117 for(j = 0; j < 4; ++j)
119 char_array_4[j] = container.find(char_array_4[j]);
122 char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
123 char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
124 char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
126 for(j = 0; j < i - 1; ++j)
128 ret += char_array_3[j];
139 return QString::fromStdString(
TTK::base64Encode((
const unsigned char *)result.c_str(), result.length()));
149 uchar dataCopy[1024];
150 strcpy((
char*)dataCopy, (
const char *)data.c_str());
153 strcpy((
char*)keyCopy, key);
156 uchar *
encrypt =
xxteaEncrypt(dataCopy, strlen((
const char *)dataCopy), keyCopy, strlen((
const char *)keyCopy), s);
171 uchar dataCopy[1024];
172 memcpy(dataCopy, decode.c_str(), decode.length());
174 dataCopy[decode.length()] =
'\0';
176 strcpy((
char*)keyCopy, key);
179 uchar *
encrypt =
xxteaDecrypt(dataCopy, decode.length(), keyCopy, strlen((
const char *)keyCopy), s);
186 raw = QString::fromUtf8(raw.c_str()).toStdString();
195 xxtea_uint z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = 0, e;
206 for(p = 0; p < n; ++p)
230 for(p = n; p > 0; --p)
244 uchar *tmp = (uchar *)
malloc(16);
245 memcpy(tmp, key, keyLength);
246 memset(tmp + keyLength,
'\0', 16 - keyLength);
255 n = (((len & 3) == 0) ? n : n + 1);
268 memset(result, 0, n << 2);
269 for(i = 0; i < len; ++i)
271 result[i >> 2] |= (
xxtea_uint)data[i] << ((i & 3) << 3);
286 if((m < n - 7) || (m > n - 4))
293 result = (uchar *)
malloc(n + 1);
294 for(i = 0; i < n; ++i)
296 result[i] = (uchar)((data[i >> 2] >> ((i & 3) << 3)) & 0xFF);
static const char * base64_chars
static constexpr wchar_t key[]
static bool isBase64(unsigned char c)
TTKString xxteaEncrypt(const TTKString &data, const char *key)
uchar * doXxteaEncrypt(uchar *data, xxtea_uint len, uchar *key, xxtea_uint *retLength)
uchar * fixKeyLength(uchar *key, xxtea_uint keyLength)
static TTKString base64Encode(const unsigned char *bytes, unsigned int length)
uchar * xxteaToByteArray(xxtea_uint *data, xxtea_uint len, int includeLength, xxtea_uint *retLength)
The namespace of the process utils.
uchar * doXxteaDecrypt(uchar *data, xxtea_uint len, uchar *key, xxtea_uint *retLength)
static TTKString base64Decode(const TTKString &bytes)
QString decrypt(const QString &data, const char *key)
void xxteaUintDecrypt(xxtea_uint *v, xxtea_uint len, xxtea_uint *k)
TTKString xxteaDecrypt(const TTKString &data, const char *key)
xxtea_uint * xxteaToUintArray(uchar *data, xxtea_uint len, int includeLength, xxtea_uint *retLength)
QString encrypt(const QString &data, const char *key)
void xxteaUintEncrypt(xxtea_uint *v, xxtea_uint len, xxtea_uint *k)