- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 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.07.2013 13:33 # −3
Stertor 27.07.2013 13:37 # −3
))))
Stertor 27.07.2013 16:39 # −2
Stertor 27.07.2013 16:40 # −2
guest 27.07.2013 17:45 # 0
Stertor 27.07.2013 17:54 # −1