public static SymmetricAlgorithm DecryptKeyClass(byte[] keyData, Gost3410AsymmetricAlgorithmBase privateKey) { if (keyData == null) { throw ExceptionUtility.ArgumentNull("keyData"); } if (privateKey == null) { throw ExceptionUtility.ArgumentNull("privateKey"); } var deformatter = new GostKeyExchangeDeformatter(privateKey); var decryptionKey = deformatter.DecryptKeyExchangeAlgorithm(keyData); return decryptionKey; }
private static Stream ReceiveEncryptedDataStream(AsymmetricAlgorithm privateKey, Stream encryptedDataStream, byte[] iv, byte[] sessionKey) { var decryptedDataStream = new MemoryStream(); var deformatter = new GostKeyExchangeDeformatter(privateKey); // Получатель принимает от отправителя зашифрованный сессионный ключ и дешифрует его using (var receiverSessionKey = deformatter.DecryptKeyExchangeAlgorithm(sessionKey)) { // Получатель принимает от отправителя вектор инициализации receiverSessionKey.IV = iv; // Получатель дешифрует данные с использованием сессионного ключа using (var decryptor = receiverSessionKey.CreateDecryptor()) { var cryptoStream = new CryptoStream(encryptedDataStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(decryptedDataStream); } } decryptedDataStream.Position = 0; return decryptedDataStream; }