Changes revert

This commit is contained in:
Šebestíček 2022-03-20 18:12:25 +01:00 committed by GitHub
parent 9a6df5abbb
commit d9a99b9851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 347 additions and 0 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Václav Šmejkal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

14
Makefile Normal file
View File

@ -0,0 +1,14 @@
all: main
# Main file
files = src/test/main.c
# Source files
files += src/*.c
# Header files
files += include/*.h
main:
@echo Compiling...
cc $(files) -lm -o out/why2

39
README.md Normal file
View File

@ -0,0 +1,39 @@
# WHY2 Encryption System
*Yeah.*
This project is made 'like a library', so compiling is useless... :)
### Table of contents
- [Using in Your projects](#using-in-your-projects)
- [Example of code](#example-of-code)
- [Example programs](#example-programs)
## Using in Your projects
To **encrypt** text, use function `encryptText()` from file `include/encrypter.h`.
To **decrypt** text, use function `decryptText()` from file `include/decrypter.h`.
Jump to [examples](#examples) if you're not sure, how to use.
## Example of code
- Encryption:
```c
//FIRST VARIANT
char *yourText = encryptText("Put here text, you want encrypt...", "tzXlZGxkhfYOvRthqokDrmGFyDMylgmeIlrJTpVAwuqrLjABXM"); //The second thing is Your **key**. (The key must be 50 characters long!)
//SECOND VARIANT
char *yourText = encryptText("Put here text, you want encrypt...", NULL); //See? You don't have to use Your key. Program will automatically generate one for you. It will be printed out, so save it somewhere.
```
- Decryption:
```c
char *yourText = decryptText("158.-83.9388.-14.57.8419.113.-98.10576", "tzXlZGxkhfYOvRthqokDrmGFyDMylgmeIlrJTpVAwuqrLjABXM"); //First parameter is Your encrypted text, the second is key you want to use for decryption it.
```
## Example programs
Uhm... There aren't any examples (for now)... I will maybe create some... Later...

7
build.sh Normal file
View File

@ -0,0 +1,7 @@
#!/bin/sh
make
if [ "$1" == "debug" ]; then
./out/why2
fi

6
include/decrypter.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef WHY2_DECRYPTER_H
#define WHY2_DECRYPTER_H
char *decryptText(char *text, char *key); //TEXT from WILL BE DECRYPTED WITH KEY AND RETURNED
#endif

6
include/encrypter.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef WHY2_ENCRYPTER_H
#define WHY2_ENCRYPTER_H
char *encryptText(char *text, char *keyNew); //TEXT from WILL BE ENCRYPTED WITH RANDOM PASSWORD [KEY] (WHICH WILL BE PRINTED OUT) AND RETURNED
#endif

10
include/flags.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef WHY2_FLAGS_H
#define WHY2_FLAGS_H
#define KEY_LENGTH 50
#define ENCRYPTION_SEPARATOR '.'
#define ENCRYPTION_SEPARATOR_STRING "."
#define INVALID_KEY 1
#endif

103
src/decrypter.c Normal file
View File

@ -0,0 +1,103 @@
#include "../include/decrypter.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "../include/flags.h"
char*
decryptText(char *text, char *key)
{
//CHECK FOR INVALID key
if (strlen(key) != KEY_LENGTH)
{
fprintf(stderr, "Key must be 50 characters long!\n");
exit(INVALID_KEY);
}
//VARIABLES
char *returningText;
int numberBuffer;
char *textBuffer;
numberBuffer = 1;
//GET LENGHT OF returningText AND textKeyChain
for (int i = 0; i < strlen(text); i++)
{
if (text[i] == ENCRYPTION_SEPARATOR) numberBuffer++;
}
//SET LENGTH
returningText = malloc(numberBuffer);
int textKeyChain[numberBuffer];
int encryptedTextKeyChain[numberBuffer];
//LOAD textKeyChain
for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++)
{
numberBuffer = i;
//CHECK, IF numberBuffer ISN'T GREATER THAN KEY_LENGTH AND CUT UNUSED LENGTH
while (numberBuffer >= KEY_LENGTH)
{
numberBuffer -= KEY_LENGTH;
}
//FILL textKeyChain
if ((numberBuffer + 1) % 3 == 0)
{
textKeyChain[i] = key[numberBuffer] * key[numberBuffer + 1];
} else if ((numberBuffer + 1) % 2 == 0)
{
textKeyChain[i] = key[numberBuffer] - key[numberBuffer + 1];
} else
{
textKeyChain[i] = key[numberBuffer] + key[numberBuffer + 1];
}
}
//LOAD encryptedTextKeyChain
for (int i = 0; i < (sizeof(encryptedTextKeyChain) / sizeof(int)); i++)
{
numberBuffer = 0;
//GET LENGTH OF EACH CHARACTER
for (int j = 0; j < strlen(text); j++)
{
if (text[j] == ENCRYPTION_SEPARATOR) break;
numberBuffer++;
}
textBuffer = malloc(numberBuffer);
//LOAD textBuffer
for (int j = 0; j < strlen(text); j++)
{
textBuffer[j] = text[j];
if (numberBuffer == j) break;
}
encryptedTextKeyChain[i] = atoi(textBuffer);
text += numberBuffer + 1;
free(textBuffer);
}
//DECRYPT TEXT
for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++)
{
textKeyChain[i] -= encryptedTextKeyChain[i];
}
//LOAD returningText
for (int i = 0; i < sizeof(textKeyChain) / sizeof(int); i++)
{
returningText[i] = (char) textKeyChain[i];
}
return returningText;
}

123
src/encrypter.c Normal file
View File

@ -0,0 +1,123 @@
#include "../include/encrypter.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include "../include/flags.h"
char*
encryptText(char *text, char *keyNew)
{
srand(time(0)); //TRY TO MAKE RANDOM GENERATION REALLY "RANDOM"
//VARIABLES
char *key = malloc(KEY_LENGTH);
char *returningText;
char *textBuffer;
int textKeyChain[strlen(text)];
int numberBuffer;
if (keyNew != NULL)
{
if (strlen(keyNew) != KEY_LENGTH)
{
fprintf(stderr, "Key must be 50 characters long!\n");
exit(INVALID_KEY);
}
strcpy(key, keyNew);
goto skipKey;
}
//LOAD KEY
for (int i = 0; i < KEY_LENGTH; i++)
{
//SET numberBuffer TO RANDOM NUMBER BETWEEN 0 AND 52
numberBuffer = (rand() % 52) + 1;
//GET CHAR FROM numberBuffer
if (numberBuffer > 26)
{
numberBuffer += 70;
} else
{
numberBuffer += 64;
}
key[i] = (char) numberBuffer;
}
printf("Your key is: %s\n!!! SAVE IT SOMEWHERE !!!\n\n", key);
skipKey:
//LOAD textKeyChain
for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++)
{
numberBuffer = i;
//CHECK, IF numberBuffer ISN'T GREATER THAN KEY_LENGTH AND CUT UNUSED LENGTH
while (numberBuffer >= KEY_LENGTH)
{
numberBuffer -= KEY_LENGTH;
}
//FILL textKeyChain
if ((numberBuffer + 1) % 3 == 0)
{
textKeyChain[i] = key[numberBuffer] * key[numberBuffer + 1];
} else if ((numberBuffer + 1) % 2 == 0)
{
textKeyChain[i] = key[numberBuffer] - key[numberBuffer + 1];
} else
{
textKeyChain[i] = key[numberBuffer] + key[numberBuffer + 1];
}
}
//ACTUALLY ENCRYPT TEXT
for (int i = 0; i < strlen(text); i++)
{
textKeyChain[i] -= (int) text[i];
}
numberBuffer = 0;
//COUNT REQUIRED SIZE FOR returningText
for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++)
{
numberBuffer += floor(log10(abs(textKeyChain[i]))) + 1;
//CHECK FOR MINUS
if (textKeyChain[i] > 0) numberBuffer++;
}
//ALLOCATE returningText (WITH THE SEPARATORS)
returningText = malloc(numberBuffer + (sizeof(textKeyChain) / sizeof(int) - 1));
//LOAD returningText
for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++)
{
textBuffer = malloc(floor(log10(abs(textKeyChain[i]))));
sprintf(textBuffer, "%d", textKeyChain[i]);
strcat(returningText, textBuffer);
if (i != (sizeof(textKeyChain) / sizeof(int) - 1))
{
strcat(returningText, ENCRYPTION_SEPARATOR_STRING);
}
free(textBuffer);
}
//DEALLOCATION
free(key);
return returningText;
}

18
src/test/main.c Normal file
View File

@ -0,0 +1,18 @@
#include <stdio.h>
#include <stdlib.h>
#include "../../include/encrypter.h"
#include "../../include/decrypter.h"
int
main(int args, char *argv[])
{
char *text = encryptText("Pepa smrdí.", "dsadhagsdhuhasvbdzgavdgasvgzduasvgzdavdhbashudbuas");
printf("%s\n", text);
text = decryptText(text, "dsadhagsdhuhasvbdzgavdgasvgzduasvgzdavdhbashudbuas");
printf("%s\n", text);
free(text);
return 0;
}