Advertisement
utroz

encript data system

Jan 26th, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <limits.h>
  5.  
  6. #define WHERESTR "ERROR (Line: %d): "
  7.  
  8. #define PRINT_(...) {           \
  9.     fprintf(stderr, __VA_ARGS__);   \
  10.     putchar('\n');          \
  11.     exit(EXIT_FAILURE);         \
  12.     }      
  13. #define ERROR(_fmt, ...) PRINT_(WHERESTR _fmt, __LINE__, __VA_ARGS__)
  14.  
  15. #define VERSION_    0.01
  16. #define BYTE_       0x0FF
  17. #define FILE_KEY    "file.key"
  18.  
  19. enum {
  20.     enabled = 0,
  21.     disabled
  22. } current_register_status;
  23.  
  24. enum {
  25.     recover = 0,
  26.     modify
  27. } set_data;
  28.  
  29. typedef struct data {
  30.     unsigned int id;
  31.     char message[16];
  32.     signed char status;
  33. } data_t;
  34.  
  35. typedef struct node {
  36.     data_t data;
  37.     struct node *next;
  38. } node_t;
  39.  
  40. static char key_word[16]; // (DON'T CHANGE!!!)
  41. static unsigned char KEY_MAX, KEY_MIN;
  42.  
  43. static void brute_force(const char *file_name)
  44. {
  45.     FILE *stream;
  46.     data_t tmp, aux;
  47.     register i, j;
  48.     register offset;
  49.     char c, *ptr;
  50.    
  51.     stream = fopen(file_name, "rb");
  52.     if (stream == NULL)
  53.     ERROR("%s", "Error in opening the file.");    
  54.  
  55.     fread((void*) &tmp, sizeof(data_t), 1, stream);
  56.     fprintf(stdout, "READ-> ID: %d | Message: %s | Status: %d\n",
  57.     tmp.id, tmp.message, tmp.status);
  58.    
  59.     for(i = 0; i < 256; i++) {       
  60.     for(j = 0; j < 256; j++) {
  61.         memcpy(&aux, &tmp, sizeof(data_t));  
  62.         for(ptr = (char *)&aux, offset = 0;offset < (sizeof(data_t)); offset++, ptr += 0x1) {
  63.         *ptr = ((~(*ptr)) ^ (i*j)) - (KEY_MAX & KEY_MIN);
  64.         }
  65.         if(aux.status == 0 && (aux.message[0] >= 'A' && aux.message[0] <= 'z')) {
  66.         fprintf(stdout, "COUNT: [%d] I: %d J: %d || READ-> ID: %d | Message: %s | Status: %d\n\n",
  67.             i*j, i, j, aux.id, aux.message, aux.status);
  68.         //scanf("\n%c", &c);
  69.         }
  70.     }
  71.     }
  72.     printf("Loops amount: %d\n", i * j);
  73.    
  74.     fclose(stream);
  75. }
  76.  
  77. static unsigned sort_key_value(void)
  78. {
  79.     register i;
  80.     unsigned total;    
  81.  
  82.     for(total = i = 0; i < 15; i++) {
  83.     total += (unsigned int) key_word[i];
  84.     key_word[i] = ~key_word[i]; // Invert bytes in the key.
  85.     }
  86.    
  87.     // Set a integer to a byte!  
  88.     KEY_MIN = (total & BYTE_);
  89.     KEY_MAX = ((total >> 4) & BYTE_);
  90.    
  91.     //fprintf(stdout, "KEY_MIN %d Key_MAX %d", KEY_MIN, KEY_MAX);
  92.    
  93.     return total;
  94. }    
  95.  
  96. /* Simple cryptography */
  97. static void modify_data(data_t *tmp, int option)
  98. {
  99.     register offset;
  100.     register offset_key;
  101.     char *ptr;
  102.  
  103.     /*for(ptr = (char *) tmp, offset = 0; offset < (sizeof(data_t)); offset++, ptr += 0x1) 
  104.     fprintf(stdout, "Current-> Address: %x Data: %d\n", ptr, *ptr); */
  105.    
  106.     if(option) {
  107.     for (ptr = (char *) tmp, offset = offset_key = 0; offset < (sizeof(data_t));
  108.         offset++, offset_key++, ptr += 0x1) {
  109.         if (offset_key == 0xF)
  110.         offset_key = 0;
  111.        
  112.         *ptr = ~((*ptr + (KEY_MAX & KEY_MIN)) ^ key_word[offset_key]);
  113.  
  114.     }
  115.         /*fprintf(stdout, "Modified-> Address: %x Data: %d\n", ptr,
  116.          * ptr = (~(*ptr + BYTE_)) ^ KEY_VALUE); */
  117.     fprintf(stdout, "SEC_DATA-> ID: %d | Message: %s | Status: %d\n", tmp->id,
  118.         tmp->message, tmp->status);
  119.    
  120.     } else {
  121.     for (ptr = (char *) tmp, offset = offset_key = 0; offset < (sizeof(data_t));
  122.         offset++, offset_key++, ptr += 0x1) {
  123.         if (offset_key == 0xF)
  124.         offset_key = 0;
  125.  
  126.         *ptr = ((~(*ptr)) ^ key_word[offset_key]) - (KEY_MAX & KEY_MIN);
  127.     }
  128.         //*ptr = (~(*ptr ^ (KEY_MAX + KEY_MIN))) - BYTE_;
  129.    
  130.         /*fprintf(stdout, "Recover-> Address: %x Data: %d\n", ptr,
  131.          * ptr = (~(*ptr ^ KEY_VALUE)) - BYTE_); */
  132.     }
  133. }
  134.  
  135. static void create_key(void)
  136. {
  137.     FILE *stream;
  138.     int i;
  139.    
  140.     stream = fopen(FILE_KEY, "r+b");
  141.     if (stream == NULL)
  142.     ERROR("%s (%s)", "File doesn't exist:", FILE_KEY);    
  143.    
  144.     fprintf(stdout, "* Checking for the key: ");    
  145.  
  146.     for(i = 0; fread((void*) key_word, sizeof(char), 15, stream); i++);
  147.    
  148.     if(!i) {   
  149.     srand(time(NULL));
  150.     fprintf(stdout, "Generating a new key...");
  151.     for(i = 0; i < 15; i++)
  152.         key_word[i] = (((int)rand()) % (CHAR_MAX-0xA) + 0xA);
  153.    
  154.     fprintf(stream, "%s", key_word);
  155.     fprintf(stdout, " (Key was created sucessfully!)\n");
  156.     } else
  157.     fprintf(stdout, " (Key already exists!)\n");
  158.    
  159.     fclose(stream);
  160. }
  161.  
  162. static void insert(node_t *head, data_t *buffer)
  163. {
  164.     node_t *new_node, *p;
  165.    
  166.     new_node = malloc(sizeof(node_t));
  167.     if (new_node == NULL)
  168.     ERROR("%s", "Memory can't be allocated.");
  169.    
  170.     /* Filling data in the node */
  171.     memcpy(&new_node->data, buffer, sizeof(data_t));    
  172.     new_node->next = NULL;    
  173.    
  174.     for(p = head; p->next != NULL; p = p->next)
  175.     ;    
  176.     p->next = new_node;
  177. }  
  178.  
  179. static void free_node(node_t *head)
  180. {
  181.     node_t *p, *tmp;
  182.    
  183.     for(p = head; p->next != NULL; free(tmp)) {
  184.     tmp = p;
  185.     p = p->next;
  186.     }  
  187. }
  188.  
  189. static void record_data(const char *file_name)
  190. {
  191.     FILE *stream;
  192.     data_t tmp;
  193.     signed char ret;
  194.  
  195.     stream = fopen(file_name, "ab");
  196.     if (stream == NULL)
  197.     ERROR("%s", "Error in opening the file.");
  198.    
  199.     tmp.id = 0;
  200.     printf("Input 'ID' / 'Message': ");
  201.     scanf("%d\n", &tmp.id);  
  202.     fgets(tmp.message, 15, stdin);
  203.    
  204.     tmp.message[strlen(tmp.message)-1] = '\0';    
  205.     tmp.status = enabled;
  206.    
  207.     /* Current point at begin of the file */
  208.     fseek(stream, 0, SEEK_SET);    
  209.    
  210.     modify_data(&tmp, modify);
  211.     ret = fwrite((const void*) &tmp, sizeof(data_t), 1, stream);
  212.     if (ret < 0)
  213.     ERROR("%s", "fwrite does not work.");
  214.    
  215.     modify_data(&tmp, recover);
  216.     fprintf(stdout, "WRITE-> ID: %d | Message: %s | Status: %d\n", tmp.id,
  217.         tmp.message, tmp.status);
  218.    
  219.     fclose(stream);
  220. }
  221.  
  222. static void read_file(const char *file_name, int option)
  223. {
  224.     FILE *stream;
  225.     data_t tmp;
  226.    
  227.     stream = fopen(file_name, "rb");
  228.     if (stream == NULL)
  229.     ERROR("%s", "Error in opening the file.");
  230.    
  231.     /* Current point at begin of the file */
  232.     fseek(stream, 0, SEEK_SET);
  233.  
  234.     while(fread((void*) &tmp, sizeof(data_t), 1, stream)) {
  235.     modify_data(&tmp, recover);
  236.     if(option == enabled) {
  237.         if (tmp.status == disabled)
  238.         continue;
  239.     } else if(option == disabled) {
  240.         if (tmp.status == enabled)
  241.         continue;
  242.     }  
  243.  
  244.     fprintf(stdout, "READ-> ID: %d | Message: %s | Status: %d\n",
  245.         tmp.id, tmp.message, tmp.status);
  246.     }
  247.     fclose(stream);
  248. }
  249.  
  250. static void create_new_file(node_t *head, const char *file_name)
  251. {
  252.     FILE *stream;
  253.     node_t *p;
  254.     signed char ret;
  255.    
  256.     /* Remove current file */
  257.     if (remove(file_name) != 0)
  258.     ERROR("%s", "Error on deleting file");
  259.  
  260.     stream = fopen(file_name, "ab");
  261.     if (stream == NULL)
  262.     ERROR("%s", "Error in opening the file.");    
  263.    
  264.     /* Current point at begin of the file */
  265.     fseek(stream, 0, SEEK_SET);
  266.    
  267.     /* Rewrite old file */
  268.     for(p = head; p->next != NULL; ) {
  269.     p = p->next;
  270.    
  271.     modify_data(&p->data, modify);
  272.     ret = fwrite((const void*) &p->data, sizeof(data_t), 1, stream);
  273.     if (ret < 0)
  274.         ERROR("%s", "fwrite does not work.");  
  275.  
  276.     modify_data(&p->data, recover);
  277.     fprintf(stdout, "RE-WRITE-> ID: %d | Message: %s | Status: %d\n",
  278.         p->data.id, p->data.message, p->data.status);
  279.     }
  280.    
  281.     fprintf(stdout, "File disabled sucessfully!\n");
  282.     fclose(stream);
  283. }    
  284.  
  285. static void disable_file(const char *file_name)
  286. {
  287.     FILE *stream;
  288.     data_t tmp;
  289.     node_t *head;
  290.     unsigned int buffer;    
  291.     static signed char flag_disabled;
  292.    
  293.     stream = fopen(file_name, "r+");
  294.     if (stream == NULL)
  295.     ERROR("%s", "Error in opening the file.");
  296.    
  297.     printf("ID to be disabled': ");
  298.     scanf("\n%d", &buffer);    
  299.        
  300.     /* Allocate a dummy node */
  301.     head = malloc(sizeof(node_t));
  302.     if (head == NULL)
  303.         error("memory can't be allocated");
  304.     head->next = NULL;
  305.    
  306.     /* Current point at begin of the file */
  307.     fseek(stream, 0, SEEK_SET);
  308.  
  309.     while (fread((void*) &tmp, sizeof(data_t), 1, stream)) {
  310.     modify_data(&tmp, recover);
  311.     if (tmp.id == buffer) {
  312.         tmp.status = disabled;     
  313.         flag_disabled = 1;
  314.     }
  315.     /* Insert a file content in the node */
  316.     insert(head, &tmp);
  317.     }
  318.    
  319.     if(flag_disabled) {
  320.     fclose(stream);
  321.     create_new_file(head, file_name);
  322.     } else {
  323.     fprintf(stdout, "File disabled unsucessfully!\n");
  324.     fclose(stream);
  325.     }
  326.     free_node(head);    
  327. }
  328.  
  329. static void inline
  330. start_program(const char *file_name)
  331. {  
  332.     register i;    
  333.     signed char c;
  334.     unsigned KEY_VALUE;
  335.    
  336.     char *menu[] = {   
  337.     "- Insert data:\t[0]",
  338.     "- Remove data:\t[1]",
  339.     "- Data report:\t[2]",
  340.     "- Deleted list:\t[3]",
  341.     "- Force Brute:\t[4]",
  342.     "- Exit program:\t[5]",    
  343.     "* Choose a option: "
  344.     };
  345.    
  346.     fprintf(stdout, "***Welcome to the Encrypted Data System (v%.2f)***\n\t%s\n\n",
  347.         VERSION_, "(( Created by Utroz ))");
  348.  
  349.     /* Key manager */
  350.     create_key();
  351.     KEY_VALUE = sort_key_value();
  352.    
  353.     printf("* Current Key (%s)-> %d\n* Current DataBase file-> %s\n",
  354.        FILE_KEY, KEY_VALUE, file_name);
  355.    
  356.     while (1) {
  357.     putchar('\n');
  358.     for(i = 0; i <= 6; i++)
  359.         fprintf(stdout, "%s\n", menu[i]);
  360.    
  361.     scanf("\n%c", &c); 
  362.     switch (c) {
  363.         case '0':
  364.         record_data(file_name);
  365.         break;
  366.         case '1':
  367.         disable_file(file_name);   
  368.         break;    
  369.         case '2':
  370.         read_file(file_name, enabled);     
  371.         break;  
  372.         case '3':
  373.         read_file(file_name, disabled);    
  374.         break;
  375.         case '4':
  376.         brute_force(file_name);
  377.         break;
  378.         case '5':
  379.         read_file(file_name, enabled); 
  380.         fprintf(stdout, "\n* Terminate program execution.\n");     
  381.         exit(EXIT_SUCCESS);
  382.         break;     
  383.         default:
  384.         fprintf(stdout, "Option invalid!\n");
  385.         break;
  386.     }
  387.     }
  388. }
  389.  
  390. int main(int argc, char *argv[])
  391. {
  392.     FILE *fp;
  393.     signed char c;
  394.    
  395.     /* Creating a file which still
  396.      * does not exist! */
  397.     if (argc != 2)
  398.     ERROR("Usage-> %s filename.log", argv[0]);
  399.    
  400.     fp = fopen(argv[1], "a");
  401.     if (fp == NULL)
  402.     ERROR("%s", "Error in opening the file.");
  403.     fclose(fp);    
  404.  
  405.     /* Initializes program */
  406.     start_program(argv[1]);    
  407.  
  408.     return 0;
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement