Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
· 0x8002 (CALG_MD4, код алгоритма хеширования MD4).
Первые две константы используются при вызове функции CryptGetHashParam, а третья – CryptCreateHash.

Рис. 7. Главное окно программы хеширования
Ниже приведен текст измененной программы из предыдущего примера:
using System;
using System. Collections. Generic;
using ponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System. Windows. Forms;
// подключение пространства имен классов криптографии
using System. Security. Cryptography;
// подключение классов для работы с внешними библиотеками
using System. Runtime. InteropServices;
namespace WindowsFormsApplication6
{
// класс главного окна
public partial class Form1 : Form
{
// дескриптор криптопровайдера
IntPtr hProv;
// дескриптор объекта хеширования
IntPtr hHash;
// данные из первого сообщения
byte[] bytes1;
// данные из второго сообщения
byte[] bytes2;
// хеш-значение
byte[] hash;
/* определение функций, импортируемых из внешней библиотеки с реализацией криптопровайдера */
// инициализация криптопровайдера
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptAcquireContext(ref IntPtr hProv,
string pszContainer, string pszProvaider,
uint dwProvType, uint dwFlags);
// инициализация объекта хеширования
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptCreateHash(IntPtr hProv, uint Algid,
IntPtr hKey, uint dwFlags, ref IntPtr hHash);
// хеширование данных
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptHashData(IntPtr hHash, byte[] pbData,
uint dwDataLen, uint dwFlags);
// получение хеш-значения
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptGetHashParam(IntPtr hHash, uint dwParam,
byte[] pbData, ref uint pdwDataLen, uint dwFlags);
// разрушение объекта хеширования
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptDestroyHash(IntPtr hHash);
// освобождение криптопровайдера
[DllImport("advapi32.dll", CharSet = CharSet. Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType. Bool)]
public static extern bool CryptReleaseContext(IntPtr hProv, uint dwFlags);
// конструктор класса главного окна
public Form1()
{
InitializeComponent();
// инициализация криптопровайдера
if (!CryptAcquireContext(ref hProv, null, null, 1, 0))
/* если первая попытка неудачна, инициализируем криптопровайдер с созданием контейнера ключей */
if (!CryptAcquireContext(ref hProv, null, null, 1, 8))
throw new CryptographicException
("Ошибка при инициализации криптопровайдера.");
}
// обработка нажатия кнопки "Выход"
private void Exit_Click(object sender, EventArgs e)
{
// освобождение криптопровайдера
CryptReleaseContext(hProv, 0);
// закрытие окна программы
Close();
}
/* обработка изменения текста в любом их двух редакторов для ввода сообщений */
private void Message1_TextChanged(object sender, EventArgs e)
{
// длина параметра объекта хеширования
uint hashlen;
// очистка поля для отображения хеш-значения
HashValue. Text="";
// данные для хеширования
byte[] data;
// получение данных первого сообщения
bytes1=Encoding. ASCII. GetBytes(Message1.Text);
// получение данных второго сообщения
bytes2 = Encoding. ASCII. GetBytes(Message2.Text);
// выделение памяти для хешируемых данных
data=new byte[bytes1.Length+bytes2.Length];
// объединение данных двух сообщений
bytes1.CopyTo(data, 0);
bytes2.CopyTo(data, bytes1.Length);
// инициализация объекта хеширования
if(!CryptCreateHash(hProv, 0x8002, (IntPtr)null, 0, ref hHash))
throw new CryptographicException
("Ошибка при инициализации объекта хеширования.");
// хеширование данных
if(!CryptHashData(hHash, data, (uint)data. Length, 0))
throw new CryptographicException
("Ошибка при хешировании данных.");
/* задание длины параметра, получаемого функцией CryptGetHashParam */
hashlen = 4;
// выделение памяти для буфера с получаемой длиной хеш-значения
hash = new byte[hashlen];
// получение длины хеш-значения
if (!CryptGetHashParam(hHash, 4, hash, ref hashlen, 0))
throw new CryptographicException
("Ошибка при получении длины хеш-значения.");
// сохранение полученной длины хеш-значения
uint hashsize = (uint)hash[0];
// выделение памяти для хеш-значения
hash = new byte[hashsize];
// получение вычисленного хеш-значения
if(!CryptGetHashParam(hHash, 2, hash, ref hashsize, 0))
throw new CryptographicException
("Ошибка при получении хеш-значения.");
// отображение хеш-значения в шестнадцатеричном формате
for(int i=0; i<hashsize; i++)
HashValue. Text+=string. Format("{0,2:X2}", hash[i]);
// разрушение объекта хеширования
CryptDestroyHash(hHash);
}
}
}
Контрольные вопросы
1. Какова структура криптографических классов библиотеки Framework Class Library (FCL)?
2. На каком уровне иерархии находятся классы, содержащие реализации криптографических алгоритмов?
3. Какие алгоритмы симметричного шифрования реализованы в классах библиотеки FCL?
4. Какие способы генерации, сохранения и восстановления секретных ключей симметричного шифрования возможны при использовании классов библиотеки FCL?
5. В чем преимущества каждого из способов генерации секретных ключей симметричного шифрования?
6. Какие два типа реализаций криптографических алгоритмов имеются в библиотеке FCL?
7. Как установить длину криптографического ключа, используемого объектами криптографических классов библиотеки FCL?
8. Как использовать в приложениях для Microsoft. Net криптоалгоритмы, реализации которых отсутствуют в библиотеке FCL?
9. Можно ли использовать в приложениях для реализации криптоалгоритмов, созданные поставщиками, отличными от Microsoft?
10. Какие асимметричные криптосистемы реализованы классами библиотеки FCL?
11. Чем отличаются криптографические классы библиотеки FCL, относящиеся к криптографии нового поколения (cryptography new generation, CNG)?
12. Какие классы с реализацией асимметричных криптоалгоритмов могут использоваться для обмена секретными ключами симметричного шифрования?
13. Какие классы с реализацией асимметричных криптоалгоритмов могут использоваться для вычисления и проверки электронной цифровой подписи?
14. Какие алгоритмы хеширования реализованы в классах библиотеки FCL?
15. Какие классы для вычисления кодов аутентификации сообщений существуют в библиотеке FCL?
16. В чем разница между различными классами для вычисления кодов аутентификации сообщений?
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. , , Элементарное введение в эллиптическую криптографию: Алгебраические и алгоритмические основы. − М.: КомКнига, 2006. − 328 с.
2. ГОСТ 28147-89 Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования.
3. ГОСТ Р 34.10-2001 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
4. ГОСТ Р 34.11-94 Информационная технология. Криптографическая защита информации. Функция хеширования.
5. КриптоПро CSP. http://www. cryptopro. ru/ products/csp/overview.
6. Аутентификация: от паролей до открытых ключей. − М.: Издательский дом «Вильямс», 2002. – 432 с.
7. Криптография и безопасность в технологии. NET. – М.:БИНОМ. Лаборатория знаний, 2007. – 479 с.
8. Защита информационных систем. – М.: Издательский дом МЭИ, 2010. – 88 с.
9. Б. Использование криптографических интерфейсов. М.: Издательский дом МЭИ, 2007. – 112 с.
10. Криптографические интерфейсы и их использование. − М.: Горячая линия-Телеком, 2007. – 278 с.
11. Методы и средства защиты информации в компьютерных системах. 4-е изд. ─ М.: Издательский центр «Академия», 2008. – 256 с.
12. Microsoft Corporation. MSDN Library, 1987-2012.
13. System. Security. Cryptography – пространство имен. http://msdn. /ru-ru/library/system. security. cryptography. aspx.
ОГЛАВЛЕНИЕ
Введение. 3
Глава 1. Средства обеспечения конфиденциальности данных. 6
1.1. Классы, реализующие алгоритмы симметричного шифрования. 6
1.2. Использование классов библиотеки FCL для шифрования данных. 16
1.3. Непосредственное обращениек к криптопровайдерам в приложениях для 30
Глава 2. Средства обмена секретными ключами и обеспечения аутентичности и целостности данных. 39
2.1. Классы, реализующие алгоритмы асимметричного шифрования. 39
2.2. Классы для вычисления и проверки ЭЦП.. 54
2.3. Использование классов асимметричной криптографии. 56
Глава 3. Средства хеширования и обеспечения целостности данных. 69
3.1. Классы алгоритмов хеширования. 69
3.2. Классы для вычисления и проверки кодов аутентификации сообщений 71
3.3. Использование средств хеширования и контроля целостности. 72
Контрольные вопросы.. 78
Библиографический список. 79
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |


