Created
November 24, 2022 20:04
-
-
Save ScratchyCode/0c0ac13b970d4af2a9019ebe217b4107 to your computer and use it in GitHub Desktop.
Cifrario a permutazioni pseudocasuali
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Coded by ScratchyCode | |
// Cifrario a permutazioni pseudocasuali in stile CR4 | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <math.h> | |
#include <stdbool.h> | |
#define LIM 10000 | |
int main(){ | |
unsigned long long int i, index, pim=0, codifica=0; | |
char *messaggio = (char *)calloc(LIM,sizeof(char)); | |
char *messaggio_anagrammato = (char *)calloc(LIM,sizeof(char)); | |
char *passwd = (char *)calloc(LIM,sizeof(char)); | |
// input | |
printf("Menu:\n 1) Codificare\n 2) Decodificare\nInserisci il numero della scelta: "); | |
scanf("%llu",&codifica); | |
if(codifica != 1 && codifica !=2){ | |
printf("Scelta non valida!\nExit...\n"); | |
exit(0); | |
} | |
getchar(); | |
printf("Inserisci il messaggio: "); | |
fgets(messaggio,LIM,stdin); | |
messaggio[strlen(messaggio)-1] = '\0'; // perchè salva anche il char '\n' per ultimo | |
printf("Inserisci la password: "); | |
fgets(passwd,LIM,stdin); | |
passwd[strlen(passwd)-1] = '\0'; | |
printf("Inserisci il codice PIN: "); | |
scanf("%llu",&pim); | |
// calcolo un seed a partire dalla password | |
unsigned long long int seed = 0; | |
for(i=0; i<strlen(passwd); i++){ | |
seed += passwd[i]; | |
} | |
// inizializzo la sequenza caratteristica e calcolo un transiente con il codice PIM (in analogia a veracrypt) | |
srand(seed); | |
for(i=0; i<pim; i++){ | |
rand(); | |
} | |
bool *mask = calloc(strlen(messaggio),sizeof(bool)); | |
// calcolo anagramma | |
for(i=0; i<strlen(messaggio); i++){ | |
// scambio l'ordine delle lettere | |
index = rand() % strlen(messaggio); | |
// quando questo index è già preso ne cerco un altro | |
while(mask[index] == 1){ | |
index = rand() % strlen(messaggio); | |
} | |
mask[index] = 1; | |
// codifica o decodifica | |
if(codifica == 1){ | |
messaggio_anagrammato[i] = messaggio[index]; | |
}else if(codifica == 2){ | |
messaggio_anagrammato[index] = messaggio[i]; | |
} | |
} | |
// scrittura anagramma | |
fprintf(stderr,"\nAnagramma:\n%s\n",messaggio_anagrammato); | |
free(messaggio); | |
free(passwd); | |
free(mask); | |
free(messaggio_anagrammato); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment