1. Си / Говнокод #13493

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    /*
     * 		Пример программы шифрующей данные симметрично по ключу.
     *
     *		Параметры командной строки:
     * 
     * /program_path [source file path] [destenation file path] [key] [type]
     * 
     *		[key] - кодовое слово длинной не более 255 символов.
     *		[key] - принимает два параметра cript и uncript (шифровать/расшифровать)
     * 
     *		Пример использования аргументов:
     * 
     * "/home/aleksandr/Рабочий стол/Крипт/s_cript" "/home/aleksandr/Рабочий стол/Крипт/simple_file_1.txt" "/home/aleksandr/Рабочий стол/Крипт/simple_file_2.txt" simplekey cript
     * "/home/aleksandr/Рабочий стол/Крипт/s_cript" "/home/aleksandr/Рабочий стол/Крипт/simple_file_2.txt" "/home/aleksandr/Рабочий стол/Крипт/simple_file_3.txt" simplekey uncript
     *
     * 		:P
     *  
     */
    
    #include <stdio.h>
    #include <limits.h>
    #include <string.h>
    
    void cript_uncript(FILE* src_fp, FILE* dst_fp, char* key_X, char* block, _Bool type)
    {
    	unsigned char i, real;
    	
    	while((real = fread(block, sizeof(char), UCHAR_MAX, src_fp)) > 0){
    		for(i = 0; i < real; i++){
    			if(type == 0)
    				block[i] = block[i] + key_X[i];
    			else if(type == 1)
    				block[i] = block[i] - key_X[i];
    		}
    		
    		fwrite(block, sizeof(char), real, dst_fp);
    	}
    }
    
    void generate_key(char* key, char* key_X){
    	unsigned char len, i, n = 0;
    	
    	len = strlen(key) - 1;
    	
    	for(i = 0; i < UCHAR_MAX; i++)	{
    		key_X[i] = key[n];
    		if(n++ == len) n = 0;
    	}
    }
    
    int main(int argc, char* argv[]){
    	FILE* src_fp;
    	FILE* dst_fp;
    	
    	char key[UCHAR_MAX], block[UCHAR_MAX], key_X[UCHAR_MAX], s[UCHAR_MAX];
    	char src_path[1024], dst_path[1024];
    	
    	if(argc < 4){
    		puts("not enough arguments\n");
    		return -1;
    	}
    	else{
    		strcpy(src_path, argv[1]);
    		strcpy(dst_path, argv[2]);
    		strcpy(key, argv[3]);
    		strcpy(s, argv[4]);
    	}
    	
    	if((src_fp = fopen(src_path, "rb")) != NULL){
    		if((dst_fp = fopen(dst_path, "wb")) != NULL){
    			generate_key(key, key_X);
    			
    			if(strcmp(s, "cript") == 0)
    				cript_uncript(src_fp, dst_fp, key_X, block, 0);
    			if(strcmp(s, "uncript") == 0)
    				cript_uncript(src_fp, dst_fp, key_X, block, 1);
    		}
    		else return -1;
    		
    		fclose(src_fp);
    	}
    	else return -1;
    	
    	fclose(dst_fp);

    Пример программы шифрующей данные симметрично по ключу

    Запостил: Stertor, 27 Июля 2013

    Комментарии (6) RSS

    Добавить комментарий