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 ==
'/');
23 unsigned char char_array_3[3], char_array_4[4];
27 char_array_3[i++] = *(bytes++);
30 char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
31 char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
32 char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
33 char_array_4[3] = char_array_3[2] & 0x3F;
35 for(i = 0; i < 4; ++i)
45 for(j = i; j < 3; ++j)
47 char_array_3[j] =
'\0';
50 char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
51 char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
52 char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
53 char_array_4[3] = char_array_3[2] & 0x3F;
55 for(j = 0; j < i + 1; ++j)
71 int length = bytes.length();
72 int i = 0, j = 0, in = 0;
73 unsigned char char_array_4[4], char_array_3[3];
78 while(length-- && (bytes[in] !=
'=') &&
isBase64(bytes[in]))
80 char_array_4[i++] = bytes[in]; in++;
83 for(i = 0; i < 4; ++i)
85 char_array_4[i] = container.find(char_array_4[i]);
88 char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
89 char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
90 char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
92 for(i = 0; i < 3; ++i)
94 ret += char_array_3[i];
102 for(j = i; j < 4; ++j)
107 for(j = 0; j < 4; ++j)
109 char_array_4[j] = container.find(char_array_4[j]);
112 char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
113 char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
114 char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
116 for(j = 0; j < i - 1; ++j)
118 ret += char_array_3[j];
129 return QString::fromStdString(
TTK::base64Encode((
const unsigned char *)result.c_str(), result.length()));
139 uchar dataCopy[1024];
140 strcpy((
char*)dataCopy, (
const char *)data.c_str());
143 strcpy((
char*)keyCopy, key);
146 uchar *
encrypt =
xxteaEncrypt(dataCopy, strlen((
const char *)dataCopy), keyCopy, strlen((
const char *)keyCopy), s);
161 uchar dataCopy[1024];
162 memcpy(dataCopy, decode.c_str(), decode.length());
164 dataCopy[decode.length()] =
'\0';
166 strcpy((
char*)keyCopy, key);
169 uchar *
encrypt =
xxteaDecrypt(dataCopy, decode.length(), keyCopy, strlen((
const char *)keyCopy), s);
176 raw = QString::fromUtf8(raw.c_str()).toStdString();
185 xxtea_uint z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = 0, e;
196 for(p = 0; p < n; ++p)
220 for(p = n; p > 0; --p)
234 uchar *tmp = (uchar *)
malloc(16);
235 memcpy(tmp, key, keyLength);
236 memset(tmp + keyLength,
'\0', 16 - keyLength);
245 n = (((len & 3) == 0) ? n : n + 1);
258 memset(result, 0, n << 2);
259 for(i = 0; i < len; ++i)
261 result[i >> 2] |= (
xxtea_uint)data[i] << ((i & 3) << 3);
276 if((m < n - 7) || (m > n - 4))
283 result = (uchar *)
malloc(n + 1);
284 for(i = 0; i < n; ++i)
286 result[i] = (uchar)((data[i >> 2] >> ((i & 3) << 3)) & 0xFF);
static const char * base64_chars
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)
uchar * xxteaToByteArray(xxtea_uint *data, xxtea_uint len, int includeLength, xxtea_uint *retLength)
The namespace of the application object.
static constexpr wchar_t key[]
uchar * doXxteaDecrypt(uchar *data, xxtea_uint len, uchar *key, xxtea_uint *retLength)
TTK_MODULE_EXPORT TTKString base64Decode(const TTKString &bytes)
QString decrypt(const QString &data, const char *key)
void xxteaUintDecrypt(xxtea_uint *v, xxtea_uint len, xxtea_uint *k)
TTK_MODULE_EXPORT TTKString base64Encode(const unsigned char *bytes, unsigned int len)
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)