Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <openssl/conf.h>
  4. #include <openssl/evp.h>
  5. #include <openssl/err.h>
  6.  
  7.  
  8. unsigned char *cheie;
  9. unsigned char *iv = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f";
  10.  
  11. unsigned char *buff = NULL, *buff2 = NULL, decryptedtext[500];
  12.  
  13. int lungimeaTextuluiDecriptat, lungimeaTextuluiCriptat;
  14.  
  15.  
  16. FILE *fisierTextCriptat, *fisierTextSimplu, *fisierDictionar;
  17. size_t len = 0;
  18. ssize_t read;
  19.  
  20. char line[128];
  21. int flen, flen2;
  22.  
  23. int decriptareECB(unsigned char *textCriptat, int lungimeaTextuluiCriptat
  24. , unsigned char *cheie,
  25. unsigned char *textSimplu)
  26. {
  27. EVP_CIPHER_CTX *context;
  28.  
  29. int lungime;
  30.  
  31. int lungimeaTextuluiSimplu;
  32.  
  33. /* Create and initialise the context */
  34. context = EVP_CIPHER_CTX_new();
  35.  
  36. EVP_DecryptInit_ex(context, EVP_aes_128_ecb(), NULL, cheie, NULL);
  37.  
  38. EVP_DecryptUpdate(context, textSimplu, &lungime, textCriptat, lungimeaTextuluiCriptat);
  39. lungimeaTextuluiSimplu = lungime;
  40.  
  41. EVP_DecryptFinal_ex(context, textSimplu + lungime, &lungime);
  42.  
  43. lungimeaTextuluiSimplu += lungime;
  44.  
  45.  
  46. EVP_CIPHER_CTX_free(context);
  47.  
  48. return lungimeaTextuluiSimplu;
  49. }
  50.  
  51. int decriptareCBC(unsigned char *textCriptat, int lungimeaTextuluiCriptat, unsigned char *cheie,
  52. unsigned char *iv, unsigned char *textSimplu)
  53. {
  54. EVP_CIPHER_CTX *context;
  55.  
  56. int lungime;
  57.  
  58. int lungimeaTextuluiSimplu;
  59.  
  60. /* Create and initialise the context */
  61. context = EVP_CIPHER_CTX_new();
  62.  
  63. EVP_DecryptInit_ex(context, EVP_aes_128_cbc(), NULL, cheie, iv);
  64.  
  65. EVP_DecryptUpdate(context, textSimplu, &lungime, textCriptat, lungimeaTextuluiCriptat);
  66.  
  67. lungimeaTextuluiSimplu = lungime;
  68.  
  69. EVP_DecryptFinal_ex(context, textSimplu + lungime, &lungime);
  70.  
  71. lungimeaTextuluiSimplu += lungime;
  72.  
  73.  
  74. EVP_CIPHER_CTX_free(context);
  75.  
  76. return lungimeaTextuluiSimplu;
  77. }
  78.  
  79.  
  80. void logicaDeImpartire(unsigned char* tip)
  81. {
  82.  
  83. if (strcmp(tip, "ECB") ==0)
  84. {
  85. lungimeaTextuluiDecriptat = decriptareECB(buff, flen, cheie, decryptedtext);
  86. decryptedtext[lungimeaTextuluiDecriptat] = '\0';
  87. }
  88. else if (strcmp(tip, "CBC") ==0)
  89. {
  90. lungimeaTextuluiDecriptat = decriptareCBC(buff, flen, cheie, iv, decryptedtext);
  91. decryptedtext[lungimeaTextuluiDecriptat] = '\0';
  92.  
  93. }
  94. else
  95. {
  96. printf("%s", "Nu este un algoritm cunoscut");
  97. break;
  98. }
  99.  
  100. }
  101.  
  102. int main( int argc, char *argv[] )
  103. {
  104. if(argc !=4)
  105. {
  106. printf("%s", "Numar invalid de argumente");
  107. exit(0);
  108. }
  109.  
  110.  
  111. fisierTextSimplu = fopen(argv[1], "r");
  112. fisierTextCriptat = fopen(argv[2], "r");
  113.  
  114. fisierDictionar = fopen("dictionar.txt", "r");
  115.  
  116.  
  117. fseek (fisierTextCriptat, 0, SEEK_END);
  118. flen = ftell (fisierTextCriptat);
  119. rewind (fisierTextCriptat);
  120.  
  121. fseek (fisierTextSimplu, 0, SEEK_END);
  122. flen2 = ftell (fisierTextSimplu);
  123. rewind (fisierTextSimplu);
  124.  
  125. buff = (unsigned char *)malloc(flen2+4);
  126. buff2 = (unsigned char *)malloc(flen2+4);
  127.  
  128. fread (buff, sizeof(char), flen, fisierTextCriptat);
  129. fread (buff2, sizeof(char), flen2, fisierTextSimplu);
  130.  
  131.  
  132.  
  133.  
  134.  
  135. while (fgets(line, sizeof(line) - 4, fisierDictionar))
  136. {
  137.  
  138. line[strlen(line) - 1] = '\0';
  139. int i;
  140.  
  141.  
  142. for (i = strlen(line) + 1; i <= 30; i++)
  143. strcat(line, " ");
  144. cheie = line;
  145.  
  146. logicaDeImpartire(argv[3]);
  147.  
  148. printf("%s \n", decryptedtext);
  149.  
  150. if (strcmp(buff2, decryptedtext) == 0)
  151. {
  152. printf("%s", cheie);
  153.  
  154. break;
  155. }
  156.  
  157.  
  158. }
  159.  
  160.  
  161.  
  162.  
  163.  
  164. return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement