7 0x0000000000000001l, 0x0000000000000002l, 0x0000000000000004l, 0x0000000000000008l,
8 0x0000000000000010l, 0x0000000000000020l, 0x0000000000000040l, 0x0000000000000080l,
9 0x0000000000000100l, 0x0000000000000200l, 0x0000000000000400l, 0x0000000000000800l,
10 0x0000000000001000l, 0x0000000000002000l, 0x0000000000004000l, 0x0000000000008000l,
11 0x0000000000010000l, 0x0000000000020000l, 0x0000000000040000l, 0x0000000000080000l,
12 0x0000000000100000l, 0x0000000000200000l, 0x0000000000400000l, 0x0000000000800000l,
13 0x0000000001000000l, 0x0000000002000000l, 0x0000000004000000l, 0x0000000008000000l,
14 0x0000000010000000l, 0x0000000020000000l, 0x0000000040000000l, 0x0000000080000000l,
15 0x0000000100000000l, 0x0000000200000000l, 0x0000000400000000l, 0x0000000800000000l,
16 0x0000001000000000l, 0x0000002000000000l, 0x0000004000000000l, 0x0000008000000000l,
17 0x0000010000000000l, 0x0000020000000000l, 0x0000040000000000l, 0x0000080000000000l,
18 0x0000100000000000l, 0x0000200000000000l, 0x0000400000000000l, 0x0000800000000000l,
19 0x0001000000000000l, 0x0002000000000000l, 0x0004000000000000l, 0x0008000000000000l,
20 0x0010000000000000l, 0x0020000000000000l, 0x0040000000000000l, 0x0080000000000000l,
21 0x0100000000000000l, 0x0200000000000000l, 0x0400000000000000l, 0x0800000000000000l,
22 0x1000000000000000l, 0x2000000000000000l, 0x4000000000000000l, 0x8000000000000000l
26 57, 49, 41, 33, 25, 17, 9, 1,
27 59, 51, 43, 35, 27, 19, 11, 3,
28 61, 53, 45, 37, 29, 21, 13, 5,
29 63, 55, 47, 39, 31, 23, 15, 7,
30 56, 48, 40, 32, 24, 16, 8, 0,
31 58, 50, 42, 34, 26, 18, 10, 2,
32 60, 52, 44, 36, 28, 20, 12, 4,
33 62, 54, 46, 38, 30, 22, 14, 6
37 31, 0, 1, 2, 3, 4, -1, -1,
38 3, 4, 5, 6, 7, 8, -1, -1,
39 7, 8, 9, 10, 11, 12, -1, -1,
40 11, 12, 13, 14, 15, 16, -1, -1,
41 15, 16, 17, 18, 19, 20, -1, -1,
42 19, 20, 21, 22, 23, 24, -1, -1,
43 23, 24, 25, 26, 27, 28, -1, -1,
44 27, 28, 29, 30, 31, 30, -1, -1
48 { 14, 4, 3, 15, 2, 13, 5, 3,
49 13, 14, 6, 9, 11, 2, 0, 5,
50 4, 1, 10, 12, 15, 6, 9, 10,
51 1, 8, 12, 7, 8, 11, 7, 0,
52 0, 15, 10, 5, 14, 4, 9, 10,
53 7, 8, 12, 3, 13, 1, 3, 6,
54 15, 12, 6, 11, 2, 9, 5, 0,
55 4, 2, 11, 14, 1, 7, 8, 13
57 { 15, 0, 9, 5, 6, 10, 12, 9,
58 8, 7, 2, 12, 3, 13, 5, 2,
59 1, 14, 7, 8, 11, 4, 0, 3,
60 14, 11, 13, 6, 4, 1, 10, 15,
61 3, 13, 12, 11, 15, 3, 6, 0,
62 4, 10, 1, 7, 8, 4, 11, 14,
63 13, 8, 0, 6, 2, 15, 9, 5,
64 7, 1, 10, 12, 14, 2, 5, 9
66 { 10, 13, 1, 11, 6, 8, 11, 5,
67 9, 4, 12, 2, 15, 3, 2, 14,
68 0, 6, 13, 1, 3, 15, 4, 10,
69 14, 9, 7, 12, 5, 0, 8, 7,
70 13, 1, 2, 4, 3, 6, 12, 11,
71 0, 13, 5, 14, 6, 8, 15, 2,
72 7, 10, 8, 15, 4, 9, 11, 5,
73 9, 0, 14, 3, 10, 7, 1, 12
75 { 7, 10, 1, 15, 0, 12, 11, 5,
76 14, 9, 8, 3, 9, 7, 4, 8,
77 13, 6, 2, 1, 6, 11, 12, 2,
78 3, 0, 5, 14, 10, 13, 15, 4,
79 13, 3, 4, 9, 6, 10, 1, 12,
80 11, 0, 2, 5, 0, 13, 14, 2,
81 8, 15, 7, 4, 15, 1, 10, 7,
82 5, 6, 12, 11, 3, 8, 9, 14
84 { 2, 4, 8, 15, 7, 10, 13, 6,
85 4, 1, 3, 12, 11, 7, 14, 0,
86 12, 2, 5, 9, 10, 13, 0, 3,
87 1, 11, 15, 5, 6, 8, 9, 14,
88 14, 11, 5, 6, 4, 1, 3, 10,
89 2, 12, 15, 0, 13, 2, 8, 5,
90 11, 8, 0, 15, 7, 14, 9, 4,
91 12, 7, 10, 9, 1, 13, 6, 3
93 { 12, 9, 0, 7, 9, 2, 14, 1,
94 10, 15, 3, 4, 6, 12, 5, 11,
95 1, 14, 13, 0, 2, 8, 7, 13,
96 15, 5, 4, 10, 8, 3, 11, 6,
97 10, 4, 6, 11, 7, 9, 0, 6,
98 4, 2, 13, 1, 9, 15, 3, 8,
99 15, 3, 1, 14, 12, 5, 11, 0,
100 2, 12, 14, 7, 5, 10, 8, 13
102 { 4, 1, 3, 10, 15, 12, 5, 0,
103 2, 11, 9, 6, 8, 7, 6, 9,
104 11, 4, 12, 15, 0, 3, 10, 5,
105 14, 13, 7, 8, 13, 14, 1, 2,
106 13, 6, 14, 9, 4, 1, 2, 14,
107 11, 13, 5, 0, 1, 10, 8, 3,
108 0, 11, 3, 5, 9, 4, 15, 2,
109 7, 8, 12, 15, 10, 7, 6, 12
111 { 13, 7, 10, 0, 6, 9, 5, 15,
112 8, 4, 3, 10, 11, 14, 12, 5,
113 2, 11, 9, 6, 15, 12, 0, 3,
114 4, 1, 14, 13, 1, 2, 7, 8,
115 1, 2, 12, 15, 10, 4, 0, 3,
116 13, 14, 6, 9, 7, 8, 9, 6,
117 15, 1, 5, 12, 3, 10, 14, 5,
118 8, 7, 11, 0, 4, 13, 2, 11
123 15, 6, 19, 20, 28, 11, 27, 16,
124 0, 14, 22, 25, 4, 17, 30, 9,
125 1, 7, 23, 13, 31, 26, 2, 8,
126 18, 12, 29, 5, 21, 10, 3, 24
130 39, 7, 47, 15, 55, 23, 63, 31,
131 38, 6, 46, 14, 54, 22, 62, 30,
132 37, 5, 45, 13, 53, 21, 61, 29,
133 36, 4, 44, 12, 52, 20, 60, 28,
134 35, 3, 43, 11, 51, 19, 59, 27,
135 34, 2, 42, 10, 50, 18, 58, 26,
136 33, 1, 41, 9, 49, 17, 57, 25,
137 32, 0, 40, 8, 48, 16, 56, 24
141 56, 48, 40, 32, 24, 16, 8, 0,
142 57, 49, 41, 33, 25, 17, 9, 1,
143 58, 50, 42, 34, 26, 18, 10, 2,
144 59, 51, 43, 35, 62, 54, 46, 38,
145 30, 22, 14, 6, 61, 53, 45, 37,
146 29, 21, 13, 5, 60, 52, 44, 36,
147 28, 20, 12, 4, 27, 19, 11, 3
151 13, 16, 10, 23, 0, 4, -1, -1,
152 2, 27, 14, 5, 20, 9, -1, -1,
153 22, 18, 11, 3, 25, 7, -1, -1,
154 15, 6, 26, 19, 12, 1, -1, -1,
155 40, 51, 30, 36, 46, 54, -1, -1,
156 29, 39, 50, 44, 32, 47, -1, -1,
157 43, 48, 38, 55, 33, 52, -1, -1,
158 45, 41, 49, 35, 28, 31, -1, -1
162 1, 1, 2, 2, 2, 2, 2, 2,
163 1, 2, 2, 2, 2, 2, 2, 1
167 0x0000000000000000l, 0x0000000000100001l, 0x0000000000300003l
182 quint64
bitTransform(
const int *array,
int len, quint64 source);
184 quint64
des64(quint64 *subkeys, quint64 data);
185 char*
encrypt(
char *src,
int length,
char *key);
193 const quint64 bts = source;
195 for(
int bti = 0; bti < len; ++bti)
197 if(array[bti] >= 0 && (bts & ARRAYMASK[array[bti]]) != 0)
199 dest |= ARRAYMASK[bti];
208 for(
int j = 0; j < 16; ++j)
210 const quint64 source = temp;
211 temp = ((source & ARRAYLSMASK[ARRAYLS[j]]) << (28 - ARRAYLS[j])) | ((source & ~ARRAYLSMASK[ARRAYLS[j]]) >> ARRAYLS[j]);
218 for(
int j = 0; j < 8; ++j)
230 quint64 l = 0, r = 0;
233 uchar *pR =
new uchar[8];
234 int *pSource =
new int[2];
235 pSource[0] = (
int) (out & quint64(0x00000000ffffffffl));
236 pSource[1] = (
int) ((out & quint64(0xffffffff00000000l)) >> 32);
238 for(
int i = 0; i < 16; ++i)
244 for(
int k = 0; k < 8; ++k)
246 pR[k] = (uchar) (0xff & (r >> (k * 8)));
250 for(
int sbi = 7; sbi >= 0; --sbi)
253 sOut |= MATRIXNSBOX[sbi][pR[sbi]];
259 pSource[0] = pSource[1];
260 pSource[1] = (
int) (l ^ r);
264 pSource[0] = pSource[1];
267 out = ((quint64) pSource[1] << 32 & quint64(0xffffffff00000000l)) | (quint64) (quint64(0x00000000ffffffffl) & pSource[0]);
279 for(
int i = 0; i < 8; ++i)
281 const quint64 temp = (quint64) key[i] << (i * 8);
285 const int num = length / 8;
287 quint64* subKey =
new quint64[16];
288 for(
int i = 0; i < 16; ++i)
294 quint64* pSrc = (quint64*)
malloc(num *
sizeof(quint64));
295 for(
int i = 0; i < num; ++i)
298 for(
int j = 0; j < 8; ++j)
300 pSrc[i] |= (quint64) src[i * 8 + j] << (j * 8);
304 quint64* pEncyrpt = (quint64*)
malloc((((num + 1) * 8 + 1) / 8) *
sizeof(quint64));
305 for(
int i = 0; i < num; ++i)
307 pEncyrpt[i] =
des64(subKey, pSrc[i]);
310 const int len = length;
311 const int tailNum = len % 8;
312 char* szTail = (
char*)
malloc(length - num * 8);
314 memcpy(szTail, src + num * 8, length - num * 8);
317 for(
int i = 0; i < tailNum; ++i)
319 tail64 = tail64 | (quint64(szTail[i])) << (i * 8);
322 pEncyrpt[num] =
des64(subKey, tail64);
323 char* result = (
char*)
malloc((num + 1) * 8);
326 for(
int i = 0; i < num + 1; ++i)
328 for(
int j = 0; j < 8; ++j)
330 result[temp] = (char) (0xff & (pEncyrpt[i] >> (j * 8)));
354 char *encData = d->encrypt((
char *)in.data(), in.length(), (
char *)key.data());
358 return QByteArray(str.data(), str.length());
366 char *encData = d->encrypt((
char *)str.data(), str.length(), (
char *)key.data());
368 QByteArray value(encData);
quint64 des64(quint64 *subkeys, quint64 data)
static constexpr int ARRAYPC_1[]
static constexpr int ARRAYP[]
static constexpr int ARRAYIP_1[]
static constexpr wchar_t key[]
QByteArray decrypt(const QByteArray &in, const QByteArray &key)
static constexpr int ARRAYE[]
static constexpr char MATRIXNSBOX[8][64]
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
QByteArray encrypt(const QByteArray &in, const QByteArray &key)
static constexpr int ARRAYPC_2[]
TTKString base64Decode(const TTKString &bytes)
The namespace of the algorithm.
TTKString base64Encode(const unsigned char *bytes, unsigned int len)
char * encrypt(char *src, int length, char *key)
The class of the des wrapper private.
The class of the des wrapper.
static constexpr quint64 ARRAYMASK[]
static constexpr int ARRAYLS[]
static constexpr int ARRAYIP[]
#define TTK_INIT_PRIVATE(Class)
The class of the ttk private base.
static constexpr quint64 ARRAYLSMASK[]
quint64 bitTransform(const int *array, int len, quint64 source)
void desSubKeys(quint64 key, quint64 *K, Mode mode)