Реклама:

// Создание IV

byte[] ssnlV = CryptoHelper,GoncrateKey(KeyType.IV); // Создание MAC

bytef] mac = CryptoHelpor.CrealeMac(validationKey, customerNumo + street t city + ssn);

// Создание и шифрование сеансового клена bytet] sessionKey =

CryptoHelper.GeneratoKey(KeyType.Encryption); byte[] oncryptedSessionKoy = CryptoHelper.EneryptKey(

sessionKey.

encryotionKey);

• // Шифрование SSN

byte[] ssnEnc = CryptoHelper.Encrypt(sessionKey, ssnlV. ssn);

using (SqlConnection con = new SqlConnection(cs)) {

SqlCommand cmd = new SqlCommand("AddCusTomer", con); cmd.CommandType = System,Data.CommandType.StoredPrOcedure;

cmd.Parameters.AddWi1hvalue("@CustomerName", customerName); cmd.Parameters.AddWitbVa1ue("@Street". st reet); cmd.Parameters.AddWithva1ue("@City", city); cmd.Parameters.AddWitnValue("@SSN", ssnEnc); cmd. Parameters. AddWithValue("fiiSSNIV", ssnlV); cmd.Parameters.AddWithValue("©MAC", mac); cmd. Pa ramete rs. AddWi t hVal ue( "@Sessi onKey". encryptedSessionKey);

сол. OpenQ;

cmd.ExecuteNonQuery(); con.Close():

}

>

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

1. Извлеките ключи шифрования и подтверждения.

2. Запросите данные из базы.

3. Считайте зашифрованный сеансовый ключ и расшифруйте его.

4. Считайте IV зашифрованных данных.

5. Расшифруйте данные с помощью IV и расшифрованного сеансового ключа.

6. Считайте MAC.

7. Выполните конкатенацию всех открытых данных.

8. Вычислите MAC и сравните его с сохраненным MAC. Если значения различаются, значит данные были незаконно модифицированы или повреждены.

Расшифровка записи клиента

public static Customer GetCuStomer(string customerName) <

if (string.IsNullOrEmpty(customerName)) return new CustomerQ;

// Извлечение главных ключей из хранилища ключей byte[] encryptionKey = getEncryotionKey(); byte[] validationKey = getValioationKeyO:

using (SqlConnection con = new SqlConnection(cs))

Customer с = new Customer!);

// Вызов хранимой процедуры

SqlCommand cmd = new SqlCommand("GetCustomer", con);

cmd.CommandType = System.Data.CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@CustomerName", customerName);

// Открытие подключения и выполнение запроса con. OpenQ;

SqlDataReader reader = cmd. Exec uteReaderO; reader. Read();

// Считывание открытых данных

c.CustomerlD = (int)reader["CustomerlD"];

с.CustomerName = (string)reader["CustomerName"]:

c.Street = (string)reader["Street"];

c.City = (string)reader["City"];

// Считывание и расшифровка сеансового ключа byte[] sessionKey = CryptoHelper.OecryptKey( (byte[])reade r["SessionKey"].

encryptionKey);

// Считывание и расшифрово SSN с помоцью сеансового ключа byte[] SS"IV = (byte[ ])reader ГSSNIV"]; c.Ssn = CryptoHelper.Decryptt

sessionKey,

ssniv.

(byte[])reader["SSN"]);

// Считывание и "одтэерхдение MAC byte[] mac = (byte[])reader[ "MAC"]: if (!CryDtoHelperValidateMac(


⇐ Предыдущая страница| |Следующая страница ⇒