Академический Документы
Профессиональный Документы
Культура Документы
Кафедра: БІТ
Звіт
З лабораторної роботи:
Застосування шифрів різного типу з використанням функцій
«
CryptoAPI
.»
Виконав: Перевірила:
ст. гр. КБІКС-17-1 Мельникова О.А.
Юхименко В.I.
2020
Завдання :
1.Реализовать функцию, выполняющую зашифрование произвольного файла
с заданным именем с использованием режима обратной связи по
шифротексту для заданного преподавателем блочного симметричного шифра
(например, для AES).Функции, выполняющие генерацию секретного
сеансового ключа, установку соответствующих параметров ключа и
экспортирование/импортирование ключа, взять из предыдущей лабораторной
работы. А точнее, достаточно использовать функцию импортирования ключа
(с установкой соответствующих параметров) из предыдущей лабораторной
работы, а также соответствующий двоичный файл с зашифрованным
ключом, сохраненным в требуемом формате.
Код програми:
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <WinCrypt.h>
#include <iostream>
#include <vector>
#include <string>
using std::cout;
using std::endl;
using std::cin;
struct csp_alg_properties {
PROV_ENUMALGS_EX enumalgs;
DWORD keyx_key_inc;
DWORD sig_key_inc;
};
struct block_key_info {
DWORD mode;
DWORD block_byte_size;
BYTE *iv;
};
char buff[4096];
mas.push_back(buff);
mas.push_back(buff);
if (GetLastError() != ERROR_NO_MORE_ITEMS) {
if (a == name)
return true;
return false;
if (GetLastError() == 0x80090016L) {
goto mark_create_keycase;
} else {
get_csp_containers(handler, containers);
if (name_in_array(keyset_name_1, containers)) {
mark_open_exist_keycase:
CryptReleaseContext(handler, 0);
containers.clear();
get_csp_containers(handler, containers);
} else {
mark_create_keycase:
cout << "create " << keyset_name_1 << " key container" << endl;
CryptReleaseContext(handler, 0);
if (GetLastError() == 0x8009000FL) {
goto mark_open_exist_keycase;
} else {
if (param.enumalgs.aiAlgid == alg_id)
return;
if (param.enumalgs.aiAlgid == alg_id)
return;
if (error != ERROR_NO_MORE_ITEMS)
k %= mod;
csp_alg_properties alg_prop;
flags |= CRYPT_EXPORTABLE;
flags |= CRYPT_USER_PROTECTED;
if (!CryptGenKey(csp_handler, alg_id, flags, &key_handler))
csp_alg_properties alg_prop;
flags |= CRYPT_EXPORTABLE;
flags |= CRYPT_USER_PROTECTED;
block_key_info info;
info.mode = mode;
set_key_info(key_handler, info);
delete[] info.iv;
info.block_byte_size /= 8;
DWORD blob_size;
delete[] blob;
block_key_info info;
get_key_info(key_handler, info);
if (fwrite(&(info.block_byte_size), 1, sizeof(info.block_byte_size), f) !=
sizeof(info.block_byte_size))
fclose(f);
DWORD blob_size;
delete[] blob;
block_key_info info;
if (fread(&(info.block_byte_size), 1, sizeof(info.block_byte_size), f) !=
sizeof(info.block_byte_size))
set_key_info(key_handler, info);
delete[] info.iv;
DWORD cur_len;
fclose(fin);
fclose(fout);
delete[] buff;
DWORD cur_len;
fclose(fin);
fclose(fout);
delete[] buff;
}
int main(int argc, const char **argv) {
DWORD k = 11;
HCRYPTPROV csp_handler = 0;
HCRYPTKEY key_exchange_handler = 0;
if (argc == 1) {
cout << "bad use, use one of the options below" << endl;
return 0;
try {
if (!strcmp(argv[1], "gen")) {
DWORD mode;
if (!strcmp(argv[2], "cbc")) {
mode = CRYPT_MODE_CBC;
mode = CRYPT_MODE_ECB;
} else {
} else {
}
catch (const char *error) {
return 0;