-
Notifications
You must be signed in to change notification settings - Fork 0
/
DES.h
159 lines (143 loc) · 6.33 KB
/
DES.h
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
class DES
{
public:
DES();
~DES();
void encode(string text, string key);
void decode(string text, string key);
// çàïîëíÿåì ñòðîêó
void fill(string str);
// çàïîëíÿåì ñòðîêó
void formatSourceCode();
// Çàìåíà IP (LR)
void getIP0();
string feistel(string R, string K);
string getPTransform(string str);
string feistel_SBOX(string str, int num);
// Ðàñøèðåíèå E
string e_Expend(string str);
string xor_Operation(string a, string b);
// Ò èòåðàöèÿ (çàøèôðîâàííàÿ)
string iterationT_Encrypt(int begin, int end);
// T èòåðàöèÿ (ðàñøèôðîâàíà)
string iterationT_Decrypt(int begin, int end);
// Îáðàòíàÿ çàìåíà IP
string getIP_1(string str);
// ñîðòèðóåì îòêðûòûé òåêñò 1
string formatResult(string str);
// ñîðòèðóåì îòêðûòûé òåêñò 2
string formatAndReduceResult(string str);
// Äâîè÷íîå â äåñÿòè÷íîå
int Two2Ten(string num);
// ÷àñòü ïîäðàçäåëà
// Ôîðìàò ïîäêëþ÷à
string formatKey();
// Çàìåíà ÏÊ1
string getPC1Key(string str);
// Ïîëó÷àåì C, D
void get_C_D(string str);
// Çàìåíà LS
void getKeyI();
// LS ïåðåñòàíîâêà (1)
void LS_1(string& str);
// LS ïåðåñòàíîâêà (2)
void LS_2(string& str);
// Çàìåíà ÏÊ2
string getPC2Key(string str);
// Ïîëó÷àåì îáùóþ ôóíêöèþ ïîäðàçäåëà
void getKeys();
private:
string total_code, total_key;
string tempCode_1, tempCode_2;
string m_code, code;
string L, R, C, D;
vector<string> K;
const int IP[64] = { 58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7 };
const int IP_1[64] = { 40,8,48,16,56,24,64,32,
39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,
37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,
35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,
33,1,41,9,49,17,57,25 };
const int E_exp[48] = { 32,1,2,3,4,5,
4,5,6,7,8,9,
8,9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32,1 };
const int P_transform[32] = { 16,7,20,21,
29,12,28,17,
1,15,23,26,
5,18,31,10,
2,8,24,14,
32,27,3,9,
19,13,30,6,
22,11,4,25 };
const int PC_1[56] = { 57,49,41,33,25,17,9,
1,58,50,42,34,26,18,
10,2,59,51,43,35,27,
19,11,3,60,52,44,36,
63,55,47,39,31,23,15,
7,62,54,46,38,30,22,
14,6,61,53,45,37,29,
21,13,5,28,20,12,4 };
const int PC_2[56] = { 14,17,11,24,1,5,
3,28,15,6,21,10,
23,19,12,4,26,8,
16,7,27,20,13,2,
41,52,31,37,47,55,
30,40,51,45,33,48,
44,49,39,56,34,53,
46,42,50,36,29,32 };
const int SBOX_1[4][16] = { {14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
{0,15,7,4,15,2,13,1,10,6,12,11,9,5,3,8},
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13} };
const int SBOX_2[4][16] = { {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},
{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},
{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},
{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9} };
const int SBOX_3[4][16] = { {10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},
{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},
{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},
{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12} };
const int SBOX_4[4][16] = { {7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},
{12,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},
{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},
{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14} };
const int SBOX_5[4][16] = { {2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3} };
const int SBOX_6[4][16] = { {12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13} };
const int SBOX_7[4][16] = { {4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12} };
const int SBOX_8[4][16] = { {13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11} };
typedef const int(*SBOX)[16];
SBOX SBox[8] = { SBOX_1, SBOX_2, SBOX_3, SBOX_4, SBOX_5, SBOX_6, SBOX_7, SBOX_8 };
};