Использование криптографического интерфейса приложений Cryptoapi




Министерство образования и  науки РФ

ФГБОУ ВПО «Сибирский Государственный  Технологический Университет»

 

Химико-технологический факультет  заочно-дистанционного обучения

 

Кафедра системотехники

 

 


 

 

 

 

 

ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ

 

 

 

ИСПОЛЬЗОВАНИЕ КРИПТОГРАФИЧЕСКОГО ИНТЕРФЕЙСА

 ПРИЛОЖЕНИЙ CRYPTOAPI  

Пояснительная записка

(СТ.230105.___.П3)

 

 

 

 

 

 

 

Руководитель:

____________________ ___________

                    (подпись)

_______________________________

                                    (оценка, дата)

 

Разработал:

Студент группы 22-04

_____________________________

                    (подпись)

_______________________________

(дата сдачи)

 

 

 

Красноярск 2012 
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

 

ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ ПО СИСТЕМАМ

ИСКУССТВЕННОГО ИНТЕЛЛЕКТА

 

Студент: ___________________________________________

Факультет: Химико-технологический заочно-дистанционного обучения,

 гр. 22-04

Тема курсовой работы: Использование Криптографического Интерфейса  Приложений Cryptoapi  

Вариант 3b  Разработка системы парольной аутентификации с шифрованием критичных данных

Необходимо разработать систему  парольной аутентификации с использованием функций CryptoAPI  на языке Delphi. Система  должна выполнять функции:

  • Ведение списка пользователей, их идентификаторов (логинов) и паролей. Пароли должны храниться в базе данных в виде хэш-кодов. Размер пароля ограничен снизу (не менее 8 символов).  При вводе пароле он не должен отображаться на экране.
  • Для защиты от перехвата пароля с клавиатуры программами-шпионами (keylogger) выполнить реализацию ввода логина  и пароля  через экранную клавиатуру.
  • Процесс аутентификации происходит в два этапа: сначала запрос логина, затем запрос пароля. Если проверка не прошла, пользователь не должен знать, что именно было неверно, логин или пароль.
  • Проверка пароля при его вводе пользователем осуществляется как вычисление хэш-кода от пароля, введенного пользователем, и его сравнения с хранящимся в базе данных хэш-кодом. Проверка логина заключается просто в его поиске в зарегистрированном списке.
  • Деление пользователей на администраторов и обычных пользователей. Администраторы имеют возможность редактирования списка пользователей и просмотра файла протокола,  для пользователей эти функции недоступны. Администратор может быть зарегистрирован только один, поскольку он является владельцем ключа шифрования протокола регистрации.
  • Поддержка следующих ограничений при вводе пользователем пароля:
    • Скрытый вывод символов пароля
    • Ограничение количества возможных попыток  регистрации пользователя  (до 3 раз), при этом учитывается как неправильный логин, так и неправильный пароль.

Задание выдано ___________________

 

Руководитель  ____________________

 

РЕФЕРАТ

Курсовая работа представляет собой  программный комплекс и пояснительную записку.

Пояснительная записка включает в себя 30 страницы текста, 14 рисунков.

Цель работы: Закрепление знаний и навыков, приобретаемых при изучении дисциплины «ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ» по разработке системы парольной аутентификации с использованием функций CryptoAPI  на языке Delphi.

Методы исследования: Проводимые исследования базируются на современных методах работы в СУБД Microsoft Access 2007, Delphi7.

Средство разработки: СУБД Microsoft Access 2007, Delphi7.

Полученные результаты: Система парольной аутентификации с использованием функций CryptoAPI  на языке Delphi.

Ключевые слова: защита, аутентификация, функция хэширования.

 

СОДЕРЖАНИЕ

 

 

 

ВВЕДЕНИЕ

Абсолютно надежной системой защиты фактически не может быть никакая  система. Можно судить лишь о некоторой степени надежности и рисках, связанных со взломом защиты. К примеру, в наших приложениях ОС Windows, несмотря на закрытость ее кода.

 

 

 

 

 

 

 

 

 

 

 

 

        1 ПОСТАНОВКА ЗАДАЧИ

 

Общие положения

Содержанием курсовой работы является разработка одного из вариантов программной системы защиты информации с использованием функций CryptoAPI. Разрабатываемые системы должны иметь графический интерфейс произвольного вида, который разрабатывается студентом самостоятельно. Каждого пользователя разрабатываемая система должна опознавать по его имени (идентификатору). Если имя не введено, используем имя текущего пользователя компьютера. Проверка и хранение пароля для доступа пользователя к своим ключам для вариантов 1 и 2 не требуется (считаем, что система установлена на личном  компьютере пользователя, и он контролирует доступ к компьютеру).

Допускается использование любого криптопровайдера ОС Windows, в том числе  заданного по умолчанию.

При разработке интерфейса пользователя должен быть продуман сценарий взаимодействия пользователя с системой. Интерфейс системы должен удовлетворять стандартным требованиям эргономики при разработке современных программных продуктов: предусматривать как меню, так и панель управляющих кнопок, дублирующих функции меню. Нарушение пользователем сценария работы или ошибки пользователя должны быть блокированы системой с выдачей соответствующих сообщений.

 

2 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

 

Аутентификация - проверка принадлежности субъекту доступа предъявленного им идентификатора (проверка подлинности). Методы аутентификации заключаются в проверке правильности данных об объявленной личности (субъекте вычислительной системы).

Методы аутентификации классифицируют следующим образом.

1. Пользователь знает некую уникальную  информацию, которую он предъявляет компьютеру при аутентификации. В «правильно» администрируемых системах каждый пользователь должен иметь уникальный пароль, соответственно, ввода пароля вполне достаточно для узнавания пользователя.

2. Пользователь имеет уникальный  предмет или предмет с уникальным содержимым. В обычной жизни таким предметом является ключ от любого замка. Компьютеру же предъявить такой ключ достаточно сложно, поэтому используются другие предметы, более характерные для компьютера.

3. Аутентификационная информация является неотъемлемой частью пользователя. На такой информации основаны методы биометрической аутентификации, т. е. аутентификации пользователей по их уникальным биометрическим признакам. Достаточно часто методы аутентификации комбинируют, например, используя одновременно пароль пользователя и отпечаток его пальца. Такая аутентификация называется двухфакторной.

 

Этапы аутентификации

Процесс аутентификации пользователя компьютером можно разделить  на два этапа:

• подготовительный – выполняется  при регистрации пользователя в системе. Именно тогда у пользователя запрашивается образец аутентификационной информации, например, пароль или контрольный отпечаток пальца, который будет рассматриваться системой как эталон при аутентификации;

• штатный – образец аутентификационной информации запрашивается у пользователя снова и сравнивается с хранящимся в системе эталоном. Если образец схож с эталоном с заданной точностью – пользователь считается узнанным, в противном случае пользователь будет считаться чужим, результатом чего будет, скажем, отказ в доступе на компьютер.

Для аутентификации пользователя компьютер  должен хранить некую таблицу  имен пользователей и соответствующих  им эталонов:

В наиболее простом варианте эталоном может быть просто пароль, хранящийся в открытом виде. Однако такое хранение защищает только от непривилегированных пользователей системы – администратор системы вполне сможет получить все пароли пользователей, хранящиеся в таблице, и впоследствии входить в систему от имени любого пользователя (скажем, для выполнения каких-либо злоумышленных действий, которые будут записаны на другого). Кроме того, известен факт, что подавляющее большинство пользователей используют 1–3 пароля на все случаи жизни. Поэтому узнанный злоумышленником пароль может быть применен и к другим системам или программам, в которых зарегистрирован его владелец. Наиболее часто эталон представляет собой результат какой-либо обработки аутентификационной информации, то есть Ei = f(Ai), где Ai – аутентификационная информация, а f(...) – например, функция хэширования (расчет контрольной суммы данных с использованием криптографических методов – хэша). Хэширование достаточно часто применяется в протоколах межсетевого обмена данными, а также необходимо для использования электронной цифровой подписи.

Есть и другие варианты хранения эталонов, например, такой: Ei = f(IDi, Ai). Этот вариант лучше предыдущего тем, что при одинаковых паролях двух пользователей их эталоны будут  выглядеть по-разному. Впрочем, в  данном случае вместо имен пользователей подойдет и любая случайная последовательность, ее лишь придется хранить в той же таблице для последующего вычисления эталонов в процессе аутентификации.

В любом случае функция вычисления эталона из аутентификационной информации должна быть однонаправленной, т. е. легко рассчитываться, но представлять собой вычислительную проблему при попытке вычисления в обратном направлении.

 

Парольная аутентификация

Метод аутентификации по паролю является наиболее традиционным и распространенным. Конечно же, нет ничего проще проверить, знает ли пользователь некое кодовое слово или последовательность. Однако парольная аутентификация имеет настолько много недостатков, что в ситуациях, где неверные результаты аут используется в паре с каким-то другим методом. Основные недостатки парольной аутентификации таковы:

• достаточно часто пользователи применяют легко предсказуемые  пароли, например:

– пароль эквивалентен имени пользователя или имени пользователя в обратной последовательности, или какой-либо другой производной от имени пользователя;

– пароль является словом или фразой какого-либо языка – пароль может  быть подобран путем словарной атаки, т. е. перебора в качестве пароля всех слов по словарю; программы, выполняющие  подобные атаки, существуют в Интернете  в великом множестве; правда, пользователи стали хитрее – они пытаются заменить некоторые буквы слова похожими по написанию цифрами и значками, например, password Ѓ p@ssw0rd, но и программы, реализующие словарные атаки, теперь умеют то же самое: заменять ‘a’ на ‘@’, ‘i’ на ‘1’ и т. д.; – короткие пароли еще хуже – они могут быть подобраны простым перебором всех возможных вариантов;

• существуют различные программы  подбора паролей для наиболее популярных приложений и операционных систем. Например, на сайте www.lostpassword.com можно найти программу Word Password Recovery Key, которая позволяет подобрать пароль к документу Microsoft Word, защищенному паролем. Это достаточно мощное средство, позволяющее перебирать пароли как полным перебором (для коротких паролей), так и словарной атакой, причем с подключением словарей различных языков, а также перебором при некоторых известных или предполагаемых символах пароля. Программа Word Password Recovery Key является абсолютно легальной и адресована тем пользователям, кто забыл пароль какого-либо важного документа. Однако она может быть использована и любым злоумышленником уже для не столь безобидных целей;

• пароль может быть перехвачен или  подсмотрен при его вводе либо получен путем применения насилия  к его владельцу.

 

Аутентификация по уникальному  предмету

Уникальность предмета, по которому выполняется аутентификация пользователя компьютером, определяется информацией, которую он содержит. Для аутентификации часто используются следующие носители информации:

• USB-токены – представляют собой  устройства с различной степенью интеллекта, подключаемые к порту USB компьютера;

• смарт-карты – по функциональности похожи на USB-токены, но работа с ними осуществляется с помощью специальных  устройств, называемых ридерами смарт-карт;

• электронные таблетки iButton (или Touch Memory) – это те самые ключи к домофонам, которыми оборудовано большинство подъездов в Москве; могут подключаться и к компьютеру через специальный коннектор;

• карты с магнитной полосой  – аналогичные тем, которые используются в качестве билетов в автобус или метро; также требуют специального считывателя для использования компьютером.

Надо сказать, что вышеперечисленные  предметы постоянно эволюционируют: карты с магнитной полосой  известны относительно давно, смарт-карты  вошли в массовое использование около десяти лет е позже. Да и каждый тип носителя существует в различных вариантах (исключая только карты с магнитной полосой). Например, в настоящее время используются смарт-карты трех категорий:

• карты с открытой памятью –  функциональный аналог магнитных карт, способны лишь хранить какую-либо информацию в открытом виде;

• карты с защищенной памятью  – для доступа к хранящейся в них информации необходимо предъявление пароля (PIN-кода);

• микропроцессорные карты –  фактически сочетают функции карт с защищенной памятью и различные криптографические функции.

Простейший вариант «предметной» аутентификации состоит в том, что  предмет просто хранит в открытом виде имя пользователя и его пароль. «Продвинутые» носители, например, микропроцессорные смарт-карты и подавляющее большинство USB-токенов, могут быть активными участниками процесса аутентификации (а не просто передавать по требованию пароль пользователя), что незаменимо для строгой аутентификации. В последнем случае (да и в случае смарт-карт с защищенной памятью и их аналогов) аутентификация с помощью предмета является существенно более надежной, чем парольная. Кроме того, предметы часто используются в качестве одного их факторов двухфакторной аутентификации, где в качестве второго фактора выступает пароль – например, для использования смарт-карт с защищенной памятью, микропроцессорных смарт-карт и USB-токенов необходимо предварительно предъявить PIN-код.

Предметная аутентификация также  имеет ряд недостатков:

• предмет может быть похищен  или отобран у его владельца;

• для всех предметов, кроме USB-токенов, требуется специальное оборудование для их подключения к компьютеру (на рис. 1 показаны, в частности, ридер  смарт-карт и коннектор iButton);

• для всех предметов, кроме микропроцессорных  смарт-карт и их функциональных аналогов, возможно изготовление копии или эмулятора предмета.

 

Биометрическая аутентификация

Биометрическая аутентификация –  это аутентификация пользователя по его уникальным биометрическим характеристикам. Уникальными являются, например, следующие характеристики:

• отпечатки пальцев;

• узор радужной оболочки и структура  сетчатки глаза;

• черты лица;

• схема кровеносных сосудов  лица;

• геометрия кисти руки;

• рукописная подпись;

• клавиатурный почерк (интервалы  времени между нажатиями клавиш, составляющих кодовое слово, и длительность нажатий);

• голос.

В отличие от описанных выше методов  аутентификации, биометрическая аутентификация не определяет пользователя с абсолютной точностью. С паролем все просто: он либо эквивалентен эталону, либо нет. Системы биометрической аутентификации опознают пользователя с определенной вероятностью – как человек может не узнать своего знакомого в лицо после отращивания им усов или по голосу после простуды, так и биометрическая система может не узнать легального пользователя или, что еще хуже, принять чужого за своего. Поэтому все системы биомеа в доступе – с какой вероятностью система не узнает зарегистрированного пользователя;

• ложного доступа – вероятность  ошибочного допуска нелегального пользователя.

Аналогично аутентификации по уникальному  предмету, биометрическая аутентификация нередко применяется в паре с  паролем пользователя или каким-либо другим методом. Наиболее часто в  качестве биометрических характеристик  используются отпечатки пальцев, узор радужной оболочки глаза и черты лица. Каждому из этих методов свойственны свои недостатки, например, некоторые виды сканеров отпечатков пальцев могут быть обмануты специально подготовленным «искусственным пальцем». Есть и общий для всех методов минус: необходимость в считывающем оборудовании, которое может быть достаточно дорогостоящим.

Несмотря на эти недостатки, биометрическая аутентификация сейчас развивается  наиболее бурно. Впечатляющий рост рынок  систем биометрической аутентификации пережил после печальных событий 11 сентября 2001 г. Тогда казалось, что системы опознания по чертам лица способны серьезно помочь в борьбе с терроризмом и преступностью, на ранней стадии позволяя обнаруживать всех, кто был когда-либо замечен в противоправных действиях, прежде всего потому, что логика работы именно таких систем наиболее похожа на узнавание человека человеком. Увы, в настоящее время именно системы аутентификации по чертам лица демонстрируют весьма посредственную точность опознания; однако их совершенствование идет полным ходом.

 

Удаленная аутентификация

Требования к аутентификации пользователя компьютером повышаются, если необходимо аутентифицироваться на удаленном  компьютере. Здесь применимы различные  протоколы удаленной аутентификации.

Простейший из них – протокол PAP (Password Access Protocol – протокол доступа по паролю). Информация, требуемая для аутентификации пользователя (т.е. его имя и пароль), просто передается по сети в открытом виде. Удаленный компьютер при необходимости выполняет описанные выше преобразования пароля и проверяет равенство полученного результата тому эталону, который соответствует данному пользователю.

Недостаток протокола очевиден – злоумышленник, имеющий техническую  возможность перехвата сообщений, которые отправляются в рамках протокола PAP, и оснащенный анализатором пакетов, легко получит пароль пользователя и сможет впоследствии успешно аутентифицироваться под именем данного пользователя. Тем не менее очевидная простота реализации данного протокола привела к тому, что со времен, когда интернет-сообщество не задумывалось о безопасности, протокол PAP используется в подавляющем большинстве случаев – классические реализации POP3- и FTP-серверов принимают пароли именно в открытом виде.

 

Протоколы строгой аутентификации

Существует целое семейство  протоколов, в которых аутентификационная информация пользователя совсем не передается по сети, а лишь участвует в вычислениях, как на клиентской, так и на серверной  стороне. По такому принципу lenge-Handshake Authentication Protocol – протокол аутентификации «запрос-ответ») и его версия от Microsoft – MS-CHAP. Протоколы «запрос – ответ» выполняются в несколько этапов.

Для шифрования случайного числа используется секретный ключ аутентифицируемого пользователя. Именно этот секретный ключ представляет собой аутентификационную информацию данного пользователя, его копия хранится на сервере в качестве эталона пользователя. Нетрудно заметить, что ни одна часть аутентификационной информации вообще не передается по сети, тем более в открытом виде. Аутентификация, в процессе которой используются криптографические методы, а аутентификационная информация не передается по сети, называется строгой.

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

Этап 1. Пользователь посылает серверу запрос на аутентификацию, содержащий его имя.

Этап 2. Сервер генерирует случайное  число N1 и посылает его пользователю.

Этап 3. Пользователь зашифровывает  случайное число N1: C1 = = E(N1), а также  генерирует собственное случайное число N2. C1 и N2 пользователь посылает серверу.

Этап 4. Сервер расшифровывает C1 и сравнивает результат расшифрования  с N1. Если числа равны, сервер считает  пользователя подлинным. В этом случае сервер зашифровывает число N2: C2 = E(N2) и отправляет результат пользователю.

Этап 5. Пользователь расшифровывает C2 и сравнивает с N2. Если отправленное и полученное числа совпадают, то пользователь считает, что сервер успешно  прошел проверку подлинности.

В подобных протоколах вместо симметричного  шифрования может использоваться асимметричное шифрование или электронная цифровая подпись. В последнем случае в качестве эталонов пользователей на сервере хранятся их открытые ключи, которыми сервер проверяет не зашифрованное, а подписанное пользователем случайное число. Недостаток протоколов типа CHAP состоит в том, что, в отличие от PAP, на стороне пользователя необходимо наличие клиентского модуля, выполняющего предусмотренные протоколом действия.

Существуют и более «продвинутые» протоколы строгой аутентификации, например Kerberos. Это более сложный протокол, требующий наличия выделенных серверов, задача которых сводится лишь к управлению процессом аутентификации. При этом Kerberos не дает злоумышленнику практически никаких шансов вмешаться в процесс аутентификации. Кроме того, в процессе аутентификации создается ключ шифрования, который будет впоследствии использоваться для шифрования данных, передаваемых между пользователем и сервером.

 

3 ОПИСАНИЕ  ЛОГИКИ РАБОТЫ ОСНОВНЫХ БЛОКОВ ПРОГРАММЫ

Рисунок 1. Регистрация пользователя

 

Рисунок 2. Создание нового пользователя

 

Рисунок 3. Изменение пароля пользователя

 

4 РЕАЛИЗАЦИЯ ЗАДАЧИ

 

В программе происходит ведение списка пользователей, их идентификаторов (логинов) и паролей. Пароли хранятся в базе данных в виде хэш-кодов. Размер пароля ограничен снизу (не менее 8 символов).  При вводе пароля он не отображается на экране.

Процесс аутентификации происходит в два этапа: сначала запрос логина, затем запрос пароля. Если проверка не прошла, пользователь не знает, что именно было неверно, логин или пароль. Данные последней попытки аутентификации не отображаются на экране при новой попытке.

Деление пользователей в программе происходит на администратора и обычных пользователей. Администратор имеет возможность редактирования списка пользователей и просмотра файла протокола,  для пользователей эти функции недоступны. Администратор может быть зарегистрирован только один.

Для защиты от перехвата пароля с  клавиатуры программами-шпионами (keylogger) выполнена реализация ввода логина  и пароля  через экранную клавиатуру.

Рисунок 4. Авторизация с помощью экранной клавиатуры

 

При введении пароля символы  не отображаются (рис. 5).

Рисунок 5. Символы пароля отображаются в виде звездочек

 

 

При вводе неверного логина или  пароля появляется сообщение об ошибке (рис. 6).

Рисунок 6. Ошибка при вводе неверных данных

 

Если пользователь допустил 3 ошибки при вводе логина\пароля, происходит выход из программы.

 

 

Рисунок 7. Окно, возникающее при введении более 3х раз неверных данных при авторизации

 

Окно программы представляет собой  окно сообщения, показывающее с какими правами пользователь вошел в  систему, меню, в котором содержится кнопки «Файл», «Администрирование» (не отображается если пользователь вошел с правами пользователя) и «Справка». В меню «Файл» содержатся подпункты «Войти в программу заново» и «Выход». В меню «Администрирование», содержатся пункты «Пользователи» (при выборе которого можно удалить, создать или изменить имя и пароль пользователей (рис. 9)),  и «Протокол регистраций», в котором содержаться данные о входивших в систему пользователей. Меню «Справка» содержит пункт «О программе», где можно прочитать информацию о составителе программного комплекса.

Рисунок 8. Главное окно программы при входе с правами администратора

Рисунок 9. Главное окно программы при входе с правами пользователя

Проверка пароля при его вводе  пользователем осуществляется как вычисление хэш-кода от пароля, введенного пользователем, и его сравнения с хранящимся в базе данных хэш-кодом. Проверка логина заключается просто в его поиске в зарегистрированном списке.

Рисунок 10. Редактирование пользователей

Рисунок 11. Создание нового пользователя

Рисунок 12. Изменение пользователя

 

 

Рисунок 13. Окно, появляющееся при попытке удалить пользователя

 

Рисунок 14. Протокол попыток регистраций пользователей

 

5 ИСХОДНЫЕ ТЕКСТЫ МОДУЛЕЙ

5.1 Исходный текст модуля  HashUnit.pas для работы с Crypto API

Модуль обеспечивает доступ процедур программы к функциям хэширования.

 

unit HashUnit;

 

interface

 

uses Wcrypt2, Classes, Windows, SysUtils;

 

  const  HASH_LEN = 16;   // длина хэша в алгоритме MD5 равна 16 байт

 

  function GetHash(s: string; Provider: HCRYPTPROV): string;

 

implementation

 

function GetHash(s: string; Provider: HCRYPTPROV): string; // ф-ия получает строку s и возвращает её хэш-функцию

 

 

var

  hHash: HCRYPTHASH;               // дескриптор хэш-объекта

  dwLen: DWORD;                  // длину пароля сюда пишем

  Stream: TMemoryStream;           // для получения значения хэша от хэш объекта

  i: byte;                      // для цикла

  bH: array[1..HASH_LEN] of byte;  // для получения букв пароля  в 16-ичном виде

 

begin

  result:= '';

 

  // создание хэш-объекта

  CryptCreateHash(Provider,  // созданный  криптопровайдер

                  CALG_MD5,  // алгоритм получения значения  хеша - MD5я

                  0,         // должен  быть = 0

                  0,         // должен быть = 0

                  @hHash);   // ч/з этот параметр  ф-ия возвращает дескриптор созданного  ей хеш-объекта

 

  //передаем строку  для вычсиления хэш кода

  CryptHashData(hHash,       // дескриптор ранее созданного  хеш-объекта

               PByte(s),    // пароль

                length(s),   // длина пароля

                0);          // должен  быть = 0

 

  Stream:= TMemoryStream.Create;

 

  dwLen:= HASH_LEN;                 // длина хэша в МД5 - 16 байт

  Stream.SetSize(dwLen);

 

  // формируем хэш-код

  if CryptGetHashParam(hHash,                 // ранее созданный дескриптор хеш-объекта

                       HP_HASHVAL,            // тип запрашиваемого значения - хэш-значение

                       PByte(Stream.memory),  // буфер с данными, в который запишется значение хэша

                       @dwLen,                // размер буфера данных в байтах

                       0)                     // должен быть = 0

  then begin

    Stream.Read(bH, HASH_LEN);

    for i:= 1 to HASH_LEN do

      result:= result + Format('%.2x', [bH[i]]);

  end;

 

  Stream.Free;

 

  CryptDestroyHash(hHash);  // уничтожение хэш-объекта, созданного с помощью ф-ии CryptCreateHash

end;

 

 

end.

5.2 Исходный текст модуля NewUserUnit.pas создания нового пользователя

 

unit NewUserUnit;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, DB, ADODB;

 

const MIN_PASSWORD_LENGTH = 8;    // минимальная длина  пароля

 

type

  TCreateUserForm = class(TForm)

   LoginEdt: TLabeledEdit;

    PwdPromtEdt: TLabeledEdit;

    PwdEdt: TLabeledEdit;

    OkBtn: TButton;

    CancelBtn: TButton;

    QAddUser: TADOQuery;

    procedure OkBtnClick(Sender: TObject);

    procedure LoginEdtChange(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  CreateUserForm: TCreateUserForm;

 

implementation

 

uses mainUnit, HashUnit, UsersUnit, wcrypt2;

 

{$R *.dfm}

 

procedure TCreateUserForm.OkBtnClick(Sender: TObject);

Использование криптографического интерфейса приложений Cryptoapi