-
Notifications
You must be signed in to change notification settings - Fork 0
/
project_c_add_comment.c
154 lines (137 loc) · 6.34 KB
/
project_c_add_comment.c
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
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define three 3
int matrix[4][4];
int secondmatrix[4][4];//copy the first matrix
int matrix_key[4][4];
int secondmatrix_key[4][4];//copy the first matrix_key
int tonum(char text);
int sub_byte(char index[][three]);
int shiftrow();
// abcdefghijklmnop
int main(){
char cipher[9999];
int rounds, i, j, count;
char plaintext[16] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
char key[16] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
char index[16][3];
char index_key[16][3];
char b[2], a[2]; // a = plaintext b = Key
scanf(" %[^\n]s", plaintext);
scanf(" %[^\n]s", key);
//---------------------------------------
// change number binary of KEY to HEX.
rounds = ceil(strlen(plaintext)/16);
for(i=0; i<16; i++){
sprintf(a, "%x", plaintext[i]); /* keep char ascii to hex base */
strcpy(index[i], a);
}
//---------------------------------------
// change number binary of KEY to HEX.
rounds = ceil(strlen(key)/16);
for(i=0; i<16; i++){
sprintf(b, "%x", key[i]); /* keep char ascii to hex base */
strcpy(index_key[i], b);
printf("%x\n", key[i]);
}
//---------------------------------------
sub_byte(index); //Sent to funtion sub_byte
//---------------------------------------
for(i=0; i<4; i++){
for(j=0; j<4; j++){
printf("%x ", matrix[i][j]);
}
printf("\n");
}
printf("-------------------------------------------\n");
//---------------------------------------
shiftrow(); //Sent to funtion shiftrow
//---------------------------------------
for(i=0; i<4; i++){
for(j=0; j<4; j++){
printf("%x ", matrix[i][j]);
}
printf("\n");
}
}
//---------------------------------------sub_byte-------------------------------
int sub_byte(char index[][three]){
int count=0, i, j;
int s_box[16][16] = {
{0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76},
{0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0},
{0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15},
{0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75},
{0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84},
{0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf},
{0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8},
{0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2},
{0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73},
{0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb},
{0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79},
{0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08},
{0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a},
{0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e},
{0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf},
{0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}
};
int rs_box[16][16] = {{0X52, 0x09, 0X6a, 0Xd5, 0X30, 0X36, 0Xa5, 0X38, 0Xbf, 0X40, 0Xa3, 0X9e, 0X81, 0Xf3, 0Xd7, 0Xfb},
{0X7c, 0Xe3, 0X39, 0X82, 0X9b, 0X2f, 0Xff, 0X87, 0X34, 0X8e, 0X43, 0X44, 0Xc4, 0Xde, 0Xe9, 0Xcb},
{0X54, 0X7b, 0X94, 0X32, 0Xa6, 0Xc2, 0X23, 0X3d, 0Xee, 0X4c, 0X95, 0X0b, 0X42, 0Xfa, 0Xc3, 0X4e},
{0X08, 0X2e, 0Xa1, 0X66, 0X28, 0Xd9, 0X24, 0Xb2, 0X76, 0X5b, 0Xa2, 0X49, 0X6d, 0X8b, 0Xd1, 0X25},
{0X72, 0Xf8, 0Xf6, 0X64, 0X86, 0X68, 0X98, 0X16, 0Xd4, 0Xa4, 0X5c, 0Xcc, 0X5d, 0X65, 0Xb6, 0X92},
{0X6c, 0X70, 0X48, 0X50, 0Xfd, 0Xed, 0Xb9, 0Xda, 0X5e, 0X15, 0X46, 0X57, 0Xa7, 0X8d, 0X9d, 0X84},
{0X90, 0Xd8, 0Xab, 0X00, 0X8c, 0Xbc, 0Xd3, 0X0a, 0Xf7, 0Xe4, 0X58, 0X05, 0Xb8, 0Xb3, 0X45, 0X06},
{0Xd0, 0X2c, 0X1e, 0X8f, 0Xca, 0X3f, 0X0f, 0X02, 0Xc1, 0Xaf, 0Xbd, 0X03, 0X01, 0X13, 0X8a, 0X6b},
{0X3a, 0X91, 0X11, 0X41, 0X4f, 0X67, 0Xdc, 0Xea, 0X97, 0Xf2, 0Xcf, 0Xce, 0Xf0, 0Xb4, 0Xe6, 0X73},
{0X96, 0Xac, 0X74, 0X22, 0Xe7, 0Xad, 0X35, 0X85, 0Xe2, 0Xf9, 0X37, 0Xe8, 0X1c, 0X75, 0Xdf, 0X6e},
{0X47, 0Xf1, 0X1a, 0X71, 0X1d, 0X29, 0Xc5, 0X89, 0X6f, 0Xb7, 0X62, 0X0e, 0Xaa, 0X18, 0Xbe, 0X1b},
{0Xfc, 0X56, 0X3e, 0X4b, 0Xc6, 0Xd2, 0X79, 0X20, 0X9a, 0Xdb, 0Xc0, 0Xfe, 0X78, 0Xcd, 0X5a, 0Xf4},
{0X1f, 0Xdd, 0Xa8, 0X33, 0X88, 0X07, 0Xc7, 0X31, 0Xb1, 0X12, 0X10, 0X59, 0X27, 0X80, 0Xec, 0X5f},
{0X60, 0X51, 0X7f, 0Xa9, 0X19, 0Xb5, 0X4a, 0X0d, 0X2d, 0Xe5, 0X7a, 0X9f, 0X93, 0Xc9, 0X9c, 0Xef},
{0Xa0, 0Xe0, 0X3b, 0X4d, 0Xae, 0X2a, 0Xf5, 0Xb0, 0Xc8, 0Xeb, 0Xbb, 0X3c, 0X83, 0X53, 0X99, 0X61},
{0X17, 0X2b, 0X04, 0X7e, 0Xba, 0X77, 0Xd6, 0X26, 0Xe1, 0X69, 0X14, 0X63, 0X55, 0X21, 0X0c, 0X7d}};
int a, b;
// a is ...
// b is ..
for(i=0; i<4; i++){
for(j=0; j<4; j++){
a = tonum(index[count][0]);
b = tonum(index[count][1]);
printf("%d %d %d\n", a, b, s_box[a][b]);
matrix[j][i] = s_box[a][b];
secondmatrix[j][i] = s_box[a][b];
count++;
}
}
}
//------------------------------------------tonum-------------------------------
// recive text of index(plaintext) change to (int)num sent to sub_byte.
int tonum(char text){
if(text == 'a'){return 10;}
else if(text == 'b'){return 11;}
else if(text == 'c'){return 12;}
else if(text == 'd'){return 13;}
else if(text == 'e'){return 14;}
else if(text == 'f'){return 15;}
else if(text == '\0') return '\0';
else return (int)(text - 48);
}
//------------------------------------------shiftrow----------------------------
//shift matrix Row
int shiftrow(){
matrix[1][0] = secondmatrix[1][3];
matrix[1][1] = secondmatrix[1][0];
matrix[1][2] = secondmatrix[1][1];
matrix[1][3] = secondmatrix[1][2];
matrix[2][0] = secondmatrix[2][2];
matrix[2][1] = secondmatrix[2][3];
matrix[2][2] = secondmatrix[2][0];
matrix[2][3] = secondmatrix[2][1];
matrix[3][0] = secondmatrix[3][1];
matrix[3][1] = secondmatrix[3][2];
matrix[3][2] = secondmatrix[3][3];
matrix[3][3] = secondmatrix[3][0];
}