public static byte[] EncryptKey(Gost28147SymmetricAlgorithmBase sessionKey, Gost3410AsymmetricAlgorithmBase publicKey) { if (sessionKey == null) { throw ExceptionUtility.ArgumentNull("sessionKey"); } if (publicKey == null) { throw ExceptionUtility.ArgumentNull("publicKey"); } var formatter = new GostKeyExchangeFormatter(publicKey); return formatter.CreateKeyExchangeData(sessionKey); }
private static Stream SendEncryptedDataStream(AsymmetricAlgorithm publicKey, Stream dataStream, out byte[] iv, out byte[] sessionKey) { var encryptedDataStream = new MemoryStream(); // Отправитель создает случайный сессионный ключ для шифрации данных using (var senderSessionKey = new Gost28147SymmetricAlgorithm()) { // Отправитель передает получателю вектор инициализации iv = senderSessionKey.IV; // Отправитель шифрует сессионный ключ и передает его получателю var formatter = new GostKeyExchangeFormatter(publicKey); sessionKey = formatter.CreateKeyExchangeData(senderSessionKey); // Отправитель шифрует данные с использованием сессионного ключа using (var encryptor = senderSessionKey.CreateEncryptor()) { var cryptoStream = new CryptoStream(encryptedDataStream, encryptor, CryptoStreamMode.Write); dataStream.CopyTo(cryptoStream); } } encryptedDataStream.Position = 0; return encryptedDataStream; }