Главная страница
Навигация по странице:

  • Рекомендовані для розробки програми засоби мови Сі ++

  • Методичні вказівки до виконання лабораторних робіт Київ 2014 Зміст Лабораторна робота 1 Розробка програми розмежування повноважень користувачів на основі парольної автентифікації 3


    Скачать 1.3 Mb.
    НазваниеМетодичні вказівки до виконання лабораторних робіт Київ 2014 Зміст Лабораторна робота 1 Розробка програми розмежування повноважень користувачів на основі парольної автентифікації 3
    АнкорLaby_po_ZI.doc
    Дата11.08.2018
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлаLaby_po_ZI.doc
    ТипМетодичні вказівки
    #22806
    страница3 из 7
    1   2   3   4   5   6   7

    Лабораторная работа №3 Використання функцій криптографічного інтерфейсу Windows для захисту інформації

    Зміст завдання


    1. У програму, розроблену при виконанні лабораторних робіт №1 і №2, додати засоби захисту від несанкціонованого доступу до файлу з обліковими даними зареєстрованих користувачів:

    файл з обліковими записами повинен бути зашифрований за допомогою функцій CryptoAPI з використанням сеансового ключа, генерованого на основі введеної адміністратором пральний фрази;

    при запуску програми файл з обліковими записами повинен розшифровуватися в тимчасовий файл, який після завершення роботи програми повинен бути знову зашифрований для обліку можливих змін в облікових записах користувачів («старий» вміст файлу облікових записів при цьому стирається).

    2. Варіанти використання алгоритмів шифрування і хешування при виклику функцій CryptoAPI вибираються відповідно до виданого викладачем завданням.

    Використовувані алгоритми шифрування і хешування




    Тип симетричного шифрування


    Використовуваний режим шифрування

    Додавання до ключу випадкового значення

    Використовуваний алгоритм хешування

    1

    Блоковий

    Електронна кодова книга

    Да

    MD2

    2

    Потоковий

    -

    Да

    MD2

    3

    Блоковий

    Зчеплення блоків шифру

    Да

    MD2

    4

    Потоковий

    -

    Да

    MD5

    5

    Блоковий

    Зворотній зв'язок по шифротексту

    Да

    MD2

    6

    Потоковий

    -

    Да

    SHA

    7

    Блоковий

    Електронна кодова книга

    Да

    MD4

    8

    Потоковий

    -

    Ні

    MD2

    9

    Блоковий

    Зчеплення блоків шифру

    Да

    MD4

    10

    Потоковий

    -

    Ні

    MD5

    11

    Блоковий

    Зворотній зв'язок по шифротексту

    Да

    MD4

    12

    Потоковий

    -

    Ні

    SHA

    13

    Блоковий

    Електронна кодова книга

    Да

    MD5

    14

    Блоковий

    Зчеплення блоків шифру

    Да

    MD5

    15

    Блоковий

    Зворотній зв'язок по шифротексту

    Да

    MD5

    16

    Блоковий

    Електронна кодова книга

    Да

    SHA

    17

    Блоковий

    Зчеплення блоків шифру

    Да

    SHA

    18

    Блоковий

    Зворотній зв'язок по шифротексту

    Да

    SHA

    19

    Блоковий

    Електронна кодова книга

    Ні

    MD2

    20

    Блоковий

    Зчеплення блоків шифру

    Ні

    MD2

    21

    Блоковий

    Зворотній зв'язок по шифротексту

    Ні

    MD2

    22

    Блоковий

    Електронна кодова книга

    Ні

    MD4

    23

    Блоковий

    Зчеплення блоків шифру

    Ні

    MD4

    24

    Блоковий

    Зворотній зв'язок по шифротексту

    Ні

    MD4

    25

    Блоковий

    Електронна кодова книга

    Ні

    MD5

    26

    Блоковий

    Зчеплення блоків шифру

    Ні

    MD5

    27

    Блоковий

    Зворотній зв'язок по шифротексту

    Ні

    MD5

    28

    Блоковий

    Електронна кодова книга

    Ні

    SHA

    29

    Блоковий

    Зчеплення блоків шифру

    Ні

    SHA

    30

    Блоковий

    Зворотній зв'язок по шифротексту

    Ні

    SHA

    Рекомендовані для розробки програми засоби мови Сі ++
    1. Файл облікових записів зареєстрованих користувачів для операцій шифрування (розшифрування).

    Об'єкт класу fstream, відкритий в довічним режимі (визначений у файлі fstream.h).
    2. Робота з файлом облікових записів (методи класу fstream):

    / * Відкриття існуючого файлу під ім'ям FileName для читання в довічним режимі * /
    void open (const char * FileName, ios :: in | ios :: binary);

     

    // Створення нового файлу з ім'ям FileName
    void open (const char * FileName, ios :: out | ios :: binary);
    // Читання даних з файлу в буфер buf довжини n, кратній довжині блоку шифру

    I

    stream & read (char * buf, int n);
    / * Отримання кількості байт, фактично прочитаних під час останньої операції читання з файлу * /
    int gcount ();
    // Запис в файл даних з буфера buf довжини n, кратній довжині блоку шифру
    ostream& write(const char *buf, int n);
    // Закриття файлу
    void close ();
    // Перевірка досягнення кінця файлу
    bool eof ();
    // Видалення файлу з ім'ям filename
    int remove (const char * filename);
    3. шифрування (розшифрування) файлу обліковіх запісів (константа, тіпі даних і прототипів функцій візначені в заголовному файлі wincrypt.h):
    HCRYPTPROV, HCRYPTKEY, HCRYPTHASH - тіпі даних для дескріпторів криптопровайдера (CSP), кріптографічного ключа, хеш-об'єкта
    ALG_ID - тип даних для кодів кріптографічніх алгорітмів
    / * ініціалізація криптопровайдера:

    в * phProv записується його дескриптор,

    pszContainer = NULL,

    pszProvider = NULL,

    dwProvType = PROV_RSA_FULL,

    dwFlags = 0 або (якщо при першому запуску програми CryptAcquireContext повертає FALSE) реєстрація нового користувача в криптопровайдерів dwFlags = CRYPT_NEW_KEYSET * /
    BOOL CryptAcquireContext (HCRYPTPROV * phProv, LPCSTR pszContainer,

    LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
    / * Створення пустого хеш-об'єкта (hProv - дескриптор ініціалізованих криптопровайдера, Algid - код алгоритму хешування, hKey = 0, dwFlags = 0, в * phHash записується дескриптор хеш-об'єкта) * /
    BOOL CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,

    DWORD dwFlags, HCRYPTHASH * phHash);
    / * Хеширование парольної фрази pbData довжини dwDataLen (hHash - дескриптор хеш-об'єкта, dwFlags = 0) * /
    BOOL CryptHashData (HCRYPTHASH hHash, CONST BYTE * pbData,

    DWORD dwDataLen, DWORD dwFlags);
    // Руйнування хеш-об'єкта з дескриптором hHash
    BOOL CryptDestroyHash (HCRYPTHASH hHash);
    / * Створення ключа шифрування з хеш-об'єкта з парольною фразою hBaseData (hProv - дескриптор криптопровайдера, Algid - код алгоритму шифрування, dwFlags = CRYPT_EXPORTABLE з можливим об'єднанням через | з ознакою додавання до ключа випадкового значення CRYPT_CREATE_SALT, в * phKey записується дескриптор ключа) * /
    BOOL CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid,

    HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY * phKey);
    // Руйнування ключа шифрування з дескриптором hKey
    BOOL CryptDestroyKey (HCRYPTKEY hKey);
    // Звільнення криптопровайдера з дескриптором hProv (dwFlags = 0)
    BOOL CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags);
    / * Шифрування на ключі з дескриптором hKey порції даних з буфера pbData довжини dwBufLen (dwDataLen - довжина порції даних, після виконання функції в цю змінну записується фактична довжина зашифрованих даних; hHash = 0, dwFlags = 0, Final - ознака останньої порції даних) * /
    BOOL CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,

    DWORD dwFlags, BYTE * pbData, DWORD * pdwDataLen,

    DWORD dwBufLen);
    / * Розшифровка на ключі з дескриптором hKey порції даних з буфера pbData (dwDataLen - довжина порції даних, після виконання функції в цю змінну записується фактична довжина розшифрованих даних; hHash = 0, dwFlags = 0, Final - ознака останньої порції даних) * /
    BOOL CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,

    DWORD dwFlags, BYTE * pbData, DWORD * pdwDataLen);
    / * Установка режиму шифрування для ключа hKey (dwParam = KP_MODE, pbData вказує на змінну типу unsigned long, в якій записаний код встановлюваного режиму, dwFlags = 0) , KP_MODE - режим шифрування * /
    BOOL CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE * pbData,

    DWORD dwFlags);
    .


    1   2   3   4   5   6   7


    написать администратору сайта