Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

if (KeyLength == ksdef)

isel = i;

// увеличение возможной длины ключа

KeyLength += data. aiAlgid;

i++;

}

while (KeyLength <= ksmax);

// связывание списка с массивом данных

KeyLen. DataSource = ks;

// выделение элемента списка

KeyLen. SelectedIndex = isel;

}

// обработка нажатия кнопки "Выход"

private void Exit_Click(object sender, EventArgs e)

{

// освобождение криптопровайдера

CryptReleaseContext(hProv, 0);

// закрытие главного окна

Close();

}

// обработка изменения открытого текста

private void PlainText_TextChanged(object sender, EventArgs e)

{

/* блокирование кнопки "Зашифровать", если открытый текст не введен */

Encrypt. Enabled = PlainText. Text. Length!= 0;

}

// обработка изменения шифротекста

private void CipherText_TextChanged(object sender, EventArgs e)

{

/* блокирование кнопки "Расшифровать", если шифротекст не получен */

Decrypt. Enabled = CipherText. Text. Length!= 0;

}

// обработка нажатия кнопки "Зашифровать"

private void Encrypt_Click(object sender, EventArgs e)

{

// очистка редактора с шифротекстом

CipherText. Clear();

// декодирование введенной строки открытого текста

toEncrypt = Encoding. Unicode. GetBytes(PlainText. Text);

// полученние выбранной длины ключа

KeyLength = ks[KeyLen. SelectedIndex];

/* задание длины секретного ключа для его генерации функцией CryptGenKey */

KeyLength = KeyLength << 16;

// получение случайного секретного ключа для шифрования

res=CryptGenKey(hProv, 0x6801, (uint)KeyLength, ref key);

НЕ нашли? Не то? Что вы ищете?

// если функция возвращает FALSE, то генерация исключения

if (!res)

throw new CryptographicException("Ошибка генерации ключа.");

// задание длины открытого текста

PlainLen = (uint)toEncrypt. Length;

/* шифрование открытого текста (зашифрованные данные помещаются в буфер с открытым текстом) */

res=CryptEncrypt(key, (IntPtr)null, 1, 0, toEncrypt, ref PlainLen,

(uint)toEncrypt. Length);

// если функция возвращает FALSE, то генерация исключения

if(!res)

throw new CryptographicException

("Ошибка шифрования данных.");

// получение шифротекста

encrypted = toEncrypt;

// отображение шифротекста

CipherText. Text = Encoding. Unicode. GetString(encrypted, 0,

(int)PlainLen);

// блокирование кнопки "Зашифровать"

Encrypt. Enabled = false;

// блокирование списка для выбора длины ключа

KeyLen. Enabled = false;

}

// обработка нажатия кнопки "Расшифровать"

private void Decrypt_Click(object sender, EventArgs e)

{

// очистка строки с открытым текстом

PlainText. Clear();

// получение шифротекста

encrypted = Encoding. Unicode. GetBytes(CipherText. Text);

// создание буфера для расшифрованных данных

toEncrypt = new byte[encrypted. Length];

// задание длины зашифрованных данных

CipherLen = (uint)encrypted. Length;

/* расшифрование данных (расшифрованные данные помещаются в буфер с шифротекстом) */

res = CryptDecrypt(key, (IntPtr)null, 1, 0, encrypted, ref CipherLen);

// если функция возвращает FALSE, то генерация исключения

if(!res)

throw new CryptographicException

("Ошибка расшифрования данных.");

// отображение расшифрованного открытого текста

toEncrypt = encrypted;

PlainText. Text = Encoding. Unicode. GetString(toEncrypt, 0,

toEncrypt. Length);

// блокирование кнопки "Расшифровать"

Decrypt. Enabled = false;

}

}

}

Глава 2

Средства обмена секретными ключами и обеспечения аутентичности и целостности данных

2.1. Классы, реализующие алгоритмы асимметричного шифрования

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

·  алгоритма Эль-Гамаля DSA (абстрактный базовый класс DSA и его наследник DSACryptoServiceProvider);

·  протокола Диффи-Хеллмана на эллиптических кривых ECDH (абстрактный базовый класс ECDiffieHellman и его наследник ECDiffieHellmanCng);

·  алгоритма DSA на эллиптических кривых (абстрактный базовый класс ECDsa и его наследник ECDsaCng);

·  алгоритма RSA (абстрактный базовый класс RSA и его наследник RSACryptoServiceProvider).

Базовый класс AsymmetricAlgorithm имеет следующие свойства:

·  string KeyExchangeAlgorithm – строка с названием асимметричного криптоалгоритма для обмена секретными ключами симметричного шифрования;

·  string SignatureAlgorithm – строка с названием асимметричного криптоалгоритма для электронной цифровой подписи;

·  int KeySize – длина ключа асимметричного шифрования в битах;

·  KeySizes[] LegalKeySizes – допустимые значения для ключей асимметричного шифрования (свойства объектов класса KeySizes приведены в разделе 1.1).

Метод класса AsymmetricAlgorithm:

void Clear() – освобождение все ресурсов объекта асимметричного шифрования.

Класс DSACryptoServiceProvider содержит свойства и методы для вычисления и проверки электронной цифровой подписи (ЭЦП). Этот класс имеет конструктор без параметров и конструкторы с параметрами:

·  CspParameters parameters (создание объекта с заданными параметрами для криптопровайдера);

·  int dwKeySize (создание объекта с ключом заданной длины);

·  int dwKeySize, CspParameters parameters (создание объекта с ключом заданной длины и заданными параметрами для криптопровайдера).

Дополнительные свойства класса DSACryptoServiceProvider:

·  CspKeyContainerInfo CspKeyContainerInfo (дополнительная информация о контейнере ключей, используемом криптопровайдером; объект класса CspKeyContainerInfo имеет свойства Accessible – признак доступности ключевой пары в контейнере, CryptoKeySecurity – права доступа к контейнеру ключей, Exportable – признак возможности экспорта закрытого ключа из контейнера, HardwareDevice – признак хранения закрытого ключа на аппаратном устройстве, KeyContainerName – строка с именем контейнера ключей, KeyNumber – тип пары ключей асимметричного криптоалгоритма (см. раздел 1.1), MachineKeyStore – признак хранения пары ключей в разделе системного реестра с настройками компьютера, Protected – признак защищенности ключевой пары, ProviderName – строка с именем криптопровайдера, ProviderType – тип криптопровайдера, RandomlyGenerated – признак реализации генератора случайных чисел в управляемом коде, Removable – признак возможности удаления пары ключей из контейнера, UniqueKeyContainerName – строка с гарантированно уникальным именем контейнера ключей);

·  bool PersistKeyInCsp – признак использования ключа в криптопровайдере;

·  bool PublicOnly – признак наличия в объекте асимметричного шифрования только открытого ключа;

·  static bool UseMachineKeyStore – признак хранения ключей в профиле компьютера в системном реестре, а не в профиле пользователя.

Дополнительные методы класса DSACryptoServiceProvider:

·  byte[] CreateSignature(byte[] rgbHash) – вычисление электронной цифровой подписи (ЭЦП) для заданного хеш-значения rgbHash;

·  byte[] ExportCspBlob(bool includePrivateParameters) – экспорт так называемого блоба (большого двоичного объекта, BLOB, binary large object) с информацией о ключевой паре (включая сведения о закрытом ключе, если значение параметра равно true);

·  DSAParameters ExportParameters(bool includePrivateParameters) – экспорт параметров асимметричного криптоалгоритма (включая сведения о закрытом ключе, если значение параметра равно true), класс DSAParameters будет описан далее;

·  void ImportCspBlob(byte[] keyBlob) – импорт блоба с информацией о ключевой паре;

·  void ImportParameters(DSAParameters parameters) – импорт параметров асимметричного криптоалгоритма;

·  byte[] SignData(byte[] buffer) – хеширование и вычисление ЭЦП для данных из заданного буфера;

·  byte[] SignData(Stream inputStream) – хеширование и вычисление ЭЦП для данных из заданного потока;

·  byte[] SignData(byte[] buffer, int offset, int count) – вычисление ЭЦП для count байт из буфера buffer со смещением offset;

·  byte[] SignHash(byte[] rgbHash, string str) – вычисление ЭЦП для хеш-значения rgbHash, полученного с помощью алгоритма хеширования с именем str;

·  bool VerifyData(byte[] rgbData, byte[] rgbSignature) – проверка ЭЦП rgbSignature под данными rgbData;

·  bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature) – проверка ЭЦП rgbSignature для хеш-значения rgbHash, полученного с помощью алгоритма хеширования str;

·  bool VerifySignature(byte[] rgbHash, byte[] rgbSignature) – проверка ЭЦП rgbSignature под хеш-значением rgbHash.

Методы класса DSACryptoServiceProvider по умолчанию используют алгоритм хеширования SHA1.

В классе DSAParameters (параметры криптоалгоритма DSA) определены следующие публичные поля:

·  int Counter – значение счетчика для алгоритма DSA;

·  byte[] G – значение параметра g (основание степени);

·  byte[] J – значение параметра j;

·  byte[] P – значение модуля p (простого числа длиной от 64 до 128 байт);

·  byte[] Q – значение 160-разрядного простого множителя числа p–1;

·  byte[] Seed – начальное значение для алгоритма генерации псевдослучайных чисел, с помощью которого получается значение параметра k;

·  byte[] X – значение закрытого показателя степени x;

·  byte[] Y – значение открытого параметра y (результата возведения в степень, части открытого ключа пользователя).

Класс ECDiffieHellmanCng предназначен для согласования (совместного вычисления) секретного ключа симметричного шифрования двумя участниками защищенного обмена данными. Этот ключ может быть вычислен либо с помощью хеширования двух согласованных участниками секретных частей, либо по алгоритму получения кода аутентификации сообщений с помощью хеширования (HMAC) также с использованием двух согласованных участниками частей, либо по протоколу TLS.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15