CRC and REM. USERS

This commit is contained in:
german 2025-12-28 19:43:22 +04:00
parent 6aabbf77c3
commit c0d863ef48
10 changed files with 102 additions and 33 deletions

31
DOCS.md
View File

@ -2,8 +2,8 @@
- [Установка](#установка)
- [Шифрование](#шифрование)
- [Регистрация ключа](#регистрация-ключа)
- [Создание пользователя и шифрование](#создание-пользователя-и-шифрование)
- [Чтение данных пользователя и расшифровка](#чтение-данных-пользователя-и-расшифровка)
- [Команда шифрования](#команда-шифрования)
- [Расшифровка](#расшифровка)
- [Опции команды](#опции-команды)
- [API](#api)
## Установка
@ -27,7 +27,7 @@ make update
vipre-cryptor --version
```
## Шифрование
Для шифрования программа требует создать локального пользователя, зарегистрировать электронный ключ и привязать к пользователю зашифрованный ключом файл.
Для шифрования программа требует зарегистрировать электронный ключ и привязать к нему зашифрованный файл.
## Регистрация ключа
Ключ можно создать с помощью OpenSSL:
```bash
@ -41,18 +41,16 @@ openssl rand -base64 30
vipre-cryptor --sig ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig
```
Данная команда запросит ваш ключ и запишет его в файл **ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig** особым образом.
## Создание пользователя и шифрование
Создание пользователя и шифрование файла выглядит следующим образом:
## Команда шифрования
Шифрование файла выглядит следующим образом:
```bash
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ЗАШИФРОВАННОГОАЙЛА.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
```
Данная команда запросит логин и пароль нового пользователя.
## Чтение данных пользователя и расшифровка
## Расшифровка
Для чтения данных необходимо выполнить команду:
```bash
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХАННЫХ
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ЗАШИФРОВАННОГОАЙЛА.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХАННЫХ
```
Данная команда запросит логин и пароль пользователя.
## Опции команды
Доступны опции:
- **--help**
@ -62,12 +60,15 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
- **--sig**
- **--file-input**
- **--file-out**
- **--type=users**
Все опции можно сокращать до одного знака, например:
```ini
# Опции "--file-input" и "--file-out" можно сократить до "--file" или просто "-f"
"--help" - "-h"
"--version" - "-v"
[options]
"--help" = "-h"
"--version" = "-v"
"--type=users" = "-t"
```
## API
У библиотеки есть **API**:
@ -76,10 +77,10 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
#include "vipre-manager.h"
int main(void) {
__set_api_mode("admin", "1234", "signature_key");
__set_api_mode(NULL, NULL, "signature_key");
__create_sig("api_example_key.sig");
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
__api_detach();
return EXIT_SUCCESS;
}

View File

@ -29,16 +29,24 @@ REMOVE=rm
INSTALL_NAME=/usr/local/bin/vipre-cryptor
MODE=chmod +x
RUN_OF=./
API_NAME=api_example.c
API_OUT_NAME=api_example
.PHONY: clear run install uninstall update
.PHONY: clear run install uninstall update api run-api $(OUTPUT_NAME)
$(OUTPUT_NAME): $(INPUT_NAME)
$(CC) $(OPTIONS) $(INPUT_NAME) -o $(OUTPUT_NAME)
api:
$(CC) $(OPTIONS) $(API_NAME) -o $(API_OUT_NAME)
clear:
$(REMOVE) -f $(OUTPUT_NAME)
$(REMOVE) -f $(API_OUT_NAME)
run:
$(MODE) $(OUTPUT_NAME)
$(RUN_OF)$(OUTPUT_NAME)
run-api:
$(MODE) $(API_OUT_NAME)
$(RUN_OF)$(API_OUT_NAME)
install:
$(COPY) $(OUTPUT_NAME) $(INSTALL_NAME)
uninstall:

Binary file not shown.

View File

@ -2,10 +2,10 @@
#include "vipre-manager.h"
int main(void) {
__set_api_mode("admin", "1234", "signature_key");
__set_api_mode(NULL, NULL, "signature_key");
__create_sig("api_example_key.sig");
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
__api_detach();
return EXIT_SUCCESS;
}

Binary file not shown.

BIN
key.sig

Binary file not shown.

BIN
user.bin

Binary file not shown.

0
user_test.bin Normal file
View File

Binary file not shown.

View File

@ -28,6 +28,9 @@
#include <limits.h>
#include <string.h>
#define LIB_TRUE 1
#define LIB_FALSE 0
#define VERSION "1.0"
#define ERROR_FILE_OUT "unnamed_out_file.csv"
@ -39,6 +42,7 @@ char* __YEFWHD_api_login = NULL;
char* __YEFWHD_api_password = NULL;
char* __YEFWHD_api_datakey = NULL;
char __YEFWHD_data_type = '\0';
bool __YEFWHD_users = false;
#define VIPRE_API_MODE 'A'
@ -55,6 +59,10 @@ void __set_api_mode(char* login, char* password, char* data_key) {
__YEFWHD_data_type = VIPRE_API_MODE;
}
void __use_users(bool is_use_users) {
__YEFWHD_users = is_use_users;
}
void _put_vipre_help(void) {
puts (
"Vipre Console Cryptor V " VERSION "\n"
@ -190,7 +198,7 @@ int __create_user(char* file, char* user_file, char* cry_file) {
char user_login[32];
char password[32];
int c;
if (__YEFWHD_data_type != VIPRE_API_MODE) {
if (__YEFWHD_data_type != VIPRE_API_MODE && __YEFWHD_users == true) {
fputs("Login: ", stdout);
size_t cnt = 0;
while((c=getchar())!=EOF && cnt < 31 && c != '\n') {
@ -221,10 +229,15 @@ int __create_user(char* file, char* user_file, char* cry_file) {
return EXIT_FAILURE;
}
} else {
strncpy(user_login, __YEFWHD_api_login, 31);
strncpy(password, __YEFWHD_api_password, 31);
user_login[31] = '\0';
password[31] = '\0';
if (__YEFWHD_users == false) {
strcpy(user_login, "admin");
strcpy(password, "1234");
} else {
strncpy(user_login, __YEFWHD_api_login, 31);
strncpy(password, __YEFWHD_api_password, 31);
user_login[31] = '\0';
password[31] = '\0';
}
}
fputs(user_login, wp); putc('\n', wp);
fputs(password, wp); putc('\n', wp);
@ -232,6 +245,22 @@ int __create_user(char* file, char* user_file, char* cry_file) {
unsigned long file_size = ftell(fw);
rewind(fw);
unsigned long count = 0;
unsigned char crc = 0xFF;
while (count < file_size) {
crc ^= (unsigned char)getc(fw);
unsigned short int i = 0;
while (i < 8) {
crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
i ++;
}
count ++;
}
putc((char)crc, wp);
fprintf(wp, "%lu\n", count);
rewind(fw);
count = 0;
while (count < file_size) {
c = (char)getc(fw);
c = arr[(unsigned char)c];
@ -263,21 +292,33 @@ int __read_user(char* file, char* user_file, char* cry_file) {
char password[32];
char correct_password[32];
char* res;
unsigned char crc_file = 0xFF;
res = fgets(correct_login, 32, up);
res = fgets(correct_password, 32, up);
if (__YEFWHD_data_type != VIPRE_API_MODE) {
crc_file = (unsigned char)fgetc(up);
unsigned long read_sum = 0;
res = (char*)(unsigned long int)fscanf(up, "%lu\n", &read_sum);
if (__YEFWHD_data_type != VIPRE_API_MODE && __YEFWHD_users == true) {
fputs("Login: ", stdout);
res = fgets(user_login, 32, stdin);
fputs("Password: ", stdout);
res = fgets(password, 32, stdin);
} else {
strncpy(user_login, __YEFWHD_api_login, 31);
strncpy(password, __YEFWHD_api_password, 31);
user_login[31] = '\0';
password[31] = '\0';
if (__YEFWHD_users == false) {
strcpy(user_login, "admin");
strcpy(password, "1234");
} else {
strncpy(user_login, __YEFWHD_api_login, 31);
strncpy(password, __YEFWHD_api_password, 31);
user_login[31] = '\0';
password[31] = '\0';
}
}
if (res);
if (res == NULL) {
puts("\033[1mvipre-cryptor: \033[91mThe file is in the wrong format!\033[0m");
free(arr);
return EXIT_FAILURE;
};
__nl_del(user_login); __nl_del(password);
__nl_del(correct_login); __nl_del(correct_password);
if (user_login[strlen(user_login) - 1] == '\n') user_login[strlen(user_login) - 1] = '\0';
@ -292,12 +333,26 @@ int __read_user(char* file, char* user_file, char* cry_file) {
fseek(up, save_pos, SEEK_SET);
unsigned long pos = 0;
int c;
unsigned char crc = 0xFF;
while (pos < data_size) {
c = getc(up);
c = __find_arr_index(c, arr, arr_len);
__refresh_data(arr, arr_len, abs(arr[0]));
putc(c, fw);
pos ++;
crc ^= (unsigned char)c;
unsigned short int i = 0;
while (i < 8) {
crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
i ++;
}
}
if (crc != crc_file || read_sum != pos) {
puts("\033[1mvipre-cryptor: \033[91mVerification error! Request the data again.\033[0m");
free(arr);
return EXIT_FAILURE;
}
fclose(fp);
fclose(up);
@ -314,6 +369,7 @@ int parse_file_data(int argc, char** argv) {
bool create_user = false;
bool create_sig = false;
bool read_user = false;
bool users = false;
char* cry_file = NULL;
bool read_cry_file = false;
while (n < argc) {
@ -342,6 +398,9 @@ int parse_file_data(int argc, char** argv) {
case 'f':
read_cry_file = true;
break;
case 't':
users = true;
break;
default:
printf("\033[1mvipre-cryptor: \033[91mUnknown option \"%s\"!\033[0m\n", str);
return EXIT_FAILURE;
@ -355,6 +414,7 @@ int parse_file_data(int argc, char** argv) {
}
n ++;
}
__YEFWHD_users = users;
if (file == NULL) {
puts("\033[1mvipre-cryptor: \033[91mNo input file!\033[0m");
return EXIT_FAILURE;