/// <summary> /// Зашифровать симметричный ключ /// </summary> /// <param name="symmKey"></param> /// <param name="recipientName"></param> /// <returns></returns> public byte[] EncryptSymmKey(Gost28147 symmKey, string recipientName) { Log.DssLogger.Debug($"Шифрование симметричного ключа на получателя {recipientName}"); byte[] returnArray; try { X509Certificate2 cert = _certificateService.FindAddressBookCertificateBySubjectName(recipientName) .Result; // Если ничего не нашли - выходим if (cert == null) { return(null); } // Открытый ключ получателя. AsymmetricAlgorithm pk = cert.PublicKey.Key; Gost3410 recipient = pk as Gost3410; if (recipient == null) { throw new CryptographicException("Not a gost certificate"); } GostKeyExchangeFormatter keyFormatter = new GostKeyExchangeFormatter(recipient); byte[] transport = keyFormatter.CreateKeyExchangeData(symmKey); // Создаем зашифрованный файл. using (MemoryStream ms = new MemoryStream()) { // Записываем зашифрованный симметричный ключ в виде транспортного представления. BinaryWriter bw = new BinaryWriter(ms); bw.Write(transport.Length); bw.Write(transport); // Записываем синхропосылку bw.Write(symmKey.IV.Length); bw.Write(symmKey.IV); returnArray = ms.ToArray(); } } catch (Exception exp) { Log.DssLogger.Error($"Ошибка при зашифровании симметричного ключа: {exp}"); returnArray = null; } return(returnArray); }