Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <openssl/conf.h>
- #include <openssl/evp.h>
- #include <openssl/err.h>
- int decriptareECB(unsigned char *textCriptat, int lungimeaTextuluiCriptat
- , unsigned char *cheie,
- unsigned char *textSimplu)
- {
- EVP_CIPHER_CTX *context;
- int lungime;
- int lungimeaTextuluiSimplu;
- /* Create and initialise the context */
- context = EVP_CIPHER_CTX_new();
- EVP_DecryptInit_ex(context, EVP_aes_128_ecb(), NULL, cheie, NULL);
- EVP_DecryptUpdate(context, textSimplu, &lungime, textCriptat, lungimeaTextuluiCriptat);
- lungimeaTextuluiSimplu = lungime;
- EVP_DecryptFinal_ex(context, textSimplu + lungime, &lungime);
- lungimeaTextuluiSimplu += lungime;
- EVP_CIPHER_CTX_free(context);
- return lungimeaTextuluiSimplu;
- }
- int decriptareCBC(unsigned char *textCriptat, int lungimeaTextuluiCriptat, unsigned char *cheie,
- unsigned char *iv, unsigned char *textSimplu)
- {
- EVP_CIPHER_CTX *context;
- int lungime;
- int lungimeaTextuluiSimplu;
- /* Create and initialise the context */
- context = EVP_CIPHER_CTX_new();
- EVP_DecryptInit_ex(context, EVP_aes_128_cbc(), NULL, cheie, iv);
- EVP_DecryptUpdate(context, textSimplu, &lungime, textCriptat, lungimeaTextuluiCriptat);
- lungimeaTextuluiSimplu = lungime;
- EVP_DecryptFinal_ex(context, textSimplu + lungime, &lungime);
- lungimeaTextuluiSimplu += lungime;
- EVP_CIPHER_CTX_free(context);
- return lungimeaTextuluiSimplu;
- }
- int main( int argc, char *argv[] )
- {
- if(argc !=4)
- {
- printf("%s", "Numar invalid de argumente");
- exit(0);
- }
- unsigned char *cheie;
- unsigned char *iv = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f";
- unsigned char decryptedtext[500];
- int lungimeaTextuluiDecriptat, lungimeaTextuluiCriptat;
- FILE *fC, *fR, *fD;
- // FILE *fR;
- // FILE *fD;
- size_t len = 0;
- ssize_t read;
- char line[128];
- int flen;
- int flen2;
- unsigned char *buff = NULL;
- unsigned char *buff2 = NULL;
- fR = fopen(argv[1], "r");
- fC = fopen(argv[2], "r");
- fD = fopen("dictionar.txt", "r");
- fseek (fC, 0, SEEK_END);
- flen = ftell (fC);
- rewind (fC);
- fseek (fR, 0, SEEK_END);
- flen2 = ftell (fR);
- rewind (fR);
- buff = (unsigned char *)malloc(flen2+4);
- fread (buff, sizeof(char), flen, fC);
- buff2 = (unsigned char *)malloc(flen2+4);
- fread (buff2, sizeof(char), flen2, fR);
- while (fgets(line, sizeof(line) - 4, fD))
- {
- line[strlen(line) - 1] = '\0';
- int i;
- for (i = strlen(line) + 1; i <= 30; i++)
- strcat(line, " ");
- cheie = line;
- if (strcmp(argv[3], "ECB") ==0)
- {
- lungimeaTextuluiDecriptat = decriptareECB(buff, flen, cheie, decryptedtext);
- decryptedtext[lungimeaTextuluiDecriptat] = '\0';
- }
- else if (strcmp(argv[3], "CBC") ==0)
- {
- lungimeaTextuluiDecriptat = decriptareCBC(buff, flen, cheie, iv, decryptedtext);
- decryptedtext[lungimeaTextuluiDecriptat] = '\0';
- }
- else
- {
- printf("%s", "Invalid third argument");
- break;
- }
- printf("%s", decryptedtext);
- if (strcmp(buff2, decryptedtext) == 0)
- {
- printf("%s", cheie);
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement