Compare commits
No commits in common. "polybius" and "main" have entirely different histories.
File diff suppressed because one or more lines are too long
@ -1,16 +0,0 @@
|
|||||||
Let me not to the marriage of true minds
|
|
||||||
Admit impediments. Love is not love
|
|
||||||
Which alters when it alteration finds,
|
|
||||||
Or bends with the remover to remove:
|
|
||||||
O no! it is an ever-fixed mark
|
|
||||||
That looks on tempests and is never shaken;
|
|
||||||
It is the star to every wandering bark,
|
|
||||||
Whose worth’s unknown, although his height be taken.
|
|
||||||
Love’s not Time’s fool, though rosy lips and cheeks
|
|
||||||
Within his bending sickle’s compass come:
|
|
||||||
Love alters not with his brief hours and weeks,
|
|
||||||
But bears it out even to the edge of doom.
|
|
||||||
If this be error and upon me proved,
|
|
||||||
I never writ, nor no man ever loved.
|
|
||||||
|
|
||||||
William Shakespeare
|
|
2
exec.sh
2
exec.sh
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
gcc -Wall src/main.c src/functions.c src/caesar.c src/vigenere.c src/polybius.c -o main && ./main $1 $2 $3 $4
|
gcc -Wall src/main.c src/functions.c src/caesar.c src/vigenere.c -o output/main && ./output/main $1 $2 $3 $4
|
||||||
|
25
src/caesar.c
25
src/caesar.c
@ -1,6 +1,31 @@
|
|||||||
#include "caesar.h"
|
#include "caesar.h"
|
||||||
|
|
||||||
|
#define BUFFER_SIZE 128
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function read the file block by block until the end of it
|
||||||
|
*/
|
||||||
|
int readFile(FILE *f, int *size, char *buffer){
|
||||||
|
int index = 0;
|
||||||
|
char c;
|
||||||
|
int end = 0;
|
||||||
|
|
||||||
|
do{
|
||||||
|
c = fgetc(f);
|
||||||
|
buffer[index] = c;
|
||||||
|
index++;
|
||||||
|
*size += 1;
|
||||||
|
|
||||||
|
// End of the file, we stop it
|
||||||
|
if (c == EOF){
|
||||||
|
buffer[index - 1] = '\0';
|
||||||
|
index = BUFFER_SIZE;
|
||||||
|
end = 1;
|
||||||
|
}
|
||||||
|
}while(index < BUFFER_SIZE);
|
||||||
|
|
||||||
|
return end;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
s -> path source
|
s -> path source
|
||||||
d -> path destination
|
d -> path destination
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
int foo(FILE *, int *, char *);
|
||||||
int cryptCaesar(const char *, const char *, const int);
|
int cryptCaesar(const char *, const char *, const int);
|
||||||
int decryptCaesar(const char *, const char *, const int);
|
int decryptCaesar(const char *, const char *, const int);
|
||||||
|
|
||||||
|
@ -12,35 +12,12 @@ int fileExist(const char *path) {
|
|||||||
FILE *f=NULL;
|
FILE *f=NULL;
|
||||||
f=fopen(path,"r");
|
f=fopen(path,"r");
|
||||||
|
|
||||||
if(f==NULL)
|
if(f==NULL){
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
This function read the file block by block until the end of it
|
|
||||||
*/
|
|
||||||
int readFile(FILE *f, int *size, char *buffer){
|
|
||||||
int index = 0;
|
|
||||||
char c;
|
|
||||||
int end = 0;
|
|
||||||
|
|
||||||
do{
|
|
||||||
c = fgetc(f);
|
|
||||||
buffer[index] = c;
|
|
||||||
index++;
|
|
||||||
*size += 1;
|
|
||||||
|
|
||||||
// End of the file, we stop it
|
|
||||||
if (c == EOF){
|
|
||||||
buffer[index - 1] = '\0';
|
|
||||||
index = BUFFER_SIZE;
|
|
||||||
end = 1;
|
|
||||||
}
|
|
||||||
}while(index < BUFFER_SIZE);
|
|
||||||
|
|
||||||
return end;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
path -> path source
|
path -> path source
|
||||||
This function copy all characters of the file in the buffer
|
This function copy all characters of the file in the buffer
|
||||||
|
@ -5,11 +5,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define BUFFER_SIZE 4096
|
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
void usage();
|
void usage();
|
||||||
int readFile(FILE *, int *, char *);
|
|
||||||
int fileExist(const char *path);
|
int fileExist(const char *path);
|
||||||
int copyFile(const char *path, char *buffer);
|
int copyFile(const char *path, char *buffer);
|
||||||
int addDataToFile(const char *data, const char *path);
|
int addDataToFile(const char *data, const char *path);
|
||||||
|
22
src/main.c
22
src/main.c
@ -1,7 +1,6 @@
|
|||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "caesar.h"
|
#include "caesar.h"
|
||||||
#include "vigenere.h"
|
#include "vigenere.h"
|
||||||
#include "polybius.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
int error = 0;
|
int error = 0;
|
||||||
@ -15,7 +14,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check kind of encryption
|
// Check kind of encryption
|
||||||
for(i = 0; i < 4; i++){
|
for(i = 0; i < 3; i++){
|
||||||
if(strcmp(argv[1], options[i]) == 0)
|
if(strcmp(argv[1], options[i]) == 0)
|
||||||
error++;
|
error++;
|
||||||
}
|
}
|
||||||
@ -101,24 +100,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
// Polybius square
|
// Polybius square
|
||||||
else if(strcmp(argv[1], "-s") == 0){
|
else if(strcmp(argv[1], "-s") == 0){
|
||||||
char key[26];
|
|
||||||
int res;
|
|
||||||
|
|
||||||
printf("Your key: ");
|
|
||||||
scanf("%s", key);
|
|
||||||
|
|
||||||
if (strlen(key) > 26){
|
|
||||||
printf("Your key is too big. Choose a small one\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(strcmp(hook, "crypt") == 0)
|
|
||||||
res = cryptPolybius(fileSrc, fileDst, key);
|
|
||||||
else
|
|
||||||
res = decryptPolybius(fileSrc, fileDst, key);
|
|
||||||
|
|
||||||
if (res != 0)
|
|
||||||
printf("Failed to crypt/decrypt the file\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display error */
|
/* Display error */
|
||||||
@ -129,5 +111,7 @@ int main(int argc, char *argv[]) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
free(fileDst);
|
free(fileDst);
|
||||||
|
//free(buffer);
|
||||||
|
//free(data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
174
src/polybius.c
174
src/polybius.c
@ -1,174 +0,0 @@
|
|||||||
#include "polybius.h"
|
|
||||||
|
|
||||||
|
|
||||||
int cryptPolybius(const char *filenameSrc, const char *filenameDst, const char *key){
|
|
||||||
char polybius[POLYBIUS_SIZE][POLYBIUS_SIZE];
|
|
||||||
FILE *f = NULL, *fDst = NULL;
|
|
||||||
char data[BUFFER_SIZE];
|
|
||||||
char dataEncrypted[BUFFER_SIZE];
|
|
||||||
int size = 0, end = 0, i = 0, j = 0;
|
|
||||||
char c = 0;
|
|
||||||
|
|
||||||
generateSquarePolybius(polybius, key);
|
|
||||||
|
|
||||||
for (i = 0; i < POLYBIUS_SIZE; i++){
|
|
||||||
for (j = 0; j < POLYBIUS_SIZE; j++)
|
|
||||||
printf("%c ", polybius[i][j]);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
// Open the file
|
|
||||||
f = fopen(filenameSrc, "r+");
|
|
||||||
if (f == NULL) return -1;
|
|
||||||
|
|
||||||
fDst = fopen(filenameDst, "w");
|
|
||||||
if (fDst == NULL) {
|
|
||||||
fclose(f);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
do {
|
|
||||||
end = readFile(f, &size, data);
|
|
||||||
|
|
||||||
/********* Encryption **********/
|
|
||||||
for (i = 0; i < size; i++){
|
|
||||||
if (data[i] >= 'a' && data[i] <= 'z')
|
|
||||||
c = data[i] - 32;
|
|
||||||
else c = data[i];
|
|
||||||
|
|
||||||
for (j = 0; j < POLYBIUS_SIZE; j++){
|
|
||||||
for (int x = 0; x < POLYBIUS_SIZE; x++){
|
|
||||||
if (c == polybius[j][x]){
|
|
||||||
fputc(j + '0', fDst);
|
|
||||||
fputc(x + '0', fDst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (c == '\n' || c == ' '){
|
|
||||||
fputc(c, fDst);
|
|
||||||
fputc(0, fDst); // For having a couple of number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size = 0;
|
|
||||||
memset(data, 0, BUFFER_SIZE);
|
|
||||||
memset(dataEncrypted, 0, BUFFER_SIZE);
|
|
||||||
}while(end != 1);
|
|
||||||
|
|
||||||
/* Close files */
|
|
||||||
fclose(f);
|
|
||||||
fclose(fDst);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
int decryptPolybius(const char *filenameSrc, const char *filenameDst, const char *key){
|
|
||||||
char polybius[POLYBIUS_SIZE][POLYBIUS_SIZE];
|
|
||||||
FILE *f = NULL, *fDst = NULL;
|
|
||||||
char data[BUFFER_SIZE];
|
|
||||||
char dataEncrypted[BUFFER_SIZE];
|
|
||||||
int size = 0, end = 0, i = 0, j = 0;
|
|
||||||
|
|
||||||
generateSquarePolybius(polybius, key);
|
|
||||||
|
|
||||||
for (i = 0; i < POLYBIUS_SIZE; i++){
|
|
||||||
for (j = 0; j < POLYBIUS_SIZE; j++)
|
|
||||||
printf("%c ", polybius[i][j]);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
// Open the file
|
|
||||||
f = fopen(filenameSrc, "r+");
|
|
||||||
if (f == NULL) return -1;
|
|
||||||
|
|
||||||
fDst = fopen(filenameDst, "w");
|
|
||||||
if (fDst == NULL) {
|
|
||||||
fclose(f);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
do {
|
|
||||||
end = readFile(f, &size, data);
|
|
||||||
|
|
||||||
/********* Decryption **********/
|
|
||||||
for (i = 0; i < size; i += 2){
|
|
||||||
if (data[i] >= 48 && data[i] <= 53) {
|
|
||||||
int c1 = data[i] - '0';
|
|
||||||
int c2 = data[i+1] - '0';
|
|
||||||
char c = polybius[c1][c2];
|
|
||||||
printf("%c", c);
|
|
||||||
fputc(c, fDst);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
printf("%c", data[i]);
|
|
||||||
fputc(data[i], fDst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size = 0;
|
|
||||||
memset(data, 0, BUFFER_SIZE);
|
|
||||||
memset(dataEncrypted, 0, BUFFER_SIZE);
|
|
||||||
}while(end != 1);
|
|
||||||
|
|
||||||
/* Close files */
|
|
||||||
fclose(f);
|
|
||||||
fclose(fDst);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
This function fill the polybius square
|
|
||||||
*/
|
|
||||||
static void fillSquare(int pos, int *posPolybius, char *p, char polybius[POLYBIUS_SIZE][POLYBIUS_SIZE]){
|
|
||||||
for (int i = 0; i < POLYBIUS_SIZE; i++){
|
|
||||||
polybius[pos][i] = p[*(posPolybius)];
|
|
||||||
*posPolybius = *posPolybius + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static int findKeyInSquare(const char *polybius, char c){
|
|
||||||
// We exclude the 'J' character
|
|
||||||
for (int i = 0; i < ALPHABET_SIZE - 1; i++)
|
|
||||||
if (c == polybius[i])
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
This function generate the polybius square
|
|
||||||
*/
|
|
||||||
void generateSquarePolybius(char polybius[POLYBIUS_SIZE][POLYBIUS_SIZE], const char *key){
|
|
||||||
char a[ALPHABET_SIZE - 1] = {0}; // The size is 25, we exclude the J character
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
for (int i = 0; i < strlen(key); i++){
|
|
||||||
char k;
|
|
||||||
if (key[i] >= 'a' && key[i] <= 'z')
|
|
||||||
k = key[i] - 32; // 32 = 26 + special characters
|
|
||||||
else k = key[i];
|
|
||||||
int res = findKeyInSquare(a, k);
|
|
||||||
if (res == 0)
|
|
||||||
a[pos++] = k;
|
|
||||||
}
|
|
||||||
int n = 0;
|
|
||||||
int t = pos;
|
|
||||||
for (int i = pos; i < ALPHABET_SIZE + pos; i++){
|
|
||||||
char c = 'A' + n;
|
|
||||||
if (c == 'J'){
|
|
||||||
// We check if I is in the array, if yes, we do not add it
|
|
||||||
}
|
|
||||||
/*if (c == 'I'){
|
|
||||||
// We check if J is in the array, is yes, we do not add it
|
|
||||||
int res = findKeyInSquare(a, 'J');
|
|
||||||
// J not in the array, we add it
|
|
||||||
if (res == 0){
|
|
||||||
a[t++] = 'A';
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
if (c != 'J'){
|
|
||||||
int res = findKeyInSquare(a, c);
|
|
||||||
|
|
||||||
if (res == 0)
|
|
||||||
a[t++] = c;
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
pos = 0;
|
|
||||||
fillSquare(0, &pos, a, polybius);
|
|
||||||
fillSquare(1, &pos, a, polybius);
|
|
||||||
fillSquare(2, &pos, a, polybius);
|
|
||||||
fillSquare(3, &pos, a, polybius);
|
|
||||||
fillSquare(4, &pos, a, polybius);
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#ifndef H_POLYBIUS
|
|
||||||
#define H_POLYBIUS
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "functions.h"
|
|
||||||
|
|
||||||
#define POLYBIUS_SIZE 5
|
|
||||||
#define ALPHABET_SIZE 26
|
|
||||||
|
|
||||||
int cryptPolybius(const char *, const char *, const char *);
|
|
||||||
int decryptPolybius(const char *, const char *, const char *);
|
|
||||||
void generateSquarePolybius(char polybius[5][5], const char *);
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user