/// <summary> /// 지정한 <paramref name="stream"/>을 비동기적으로 압축복원하는 Task를 빌드합니다. /// </summary> /// <param name="compressor">Compressor</param> /// <param name="stream">압축 해제할 스트림</param> /// <returns>압축해제된 스트림을 결과로 제공하는 <see cref="Task{Stream}"/></returns> public static Task<Stream> DecompressTask(this ICompressor compressor, Stream stream) { compressor.ShouldNotBeNull("compressor"); stream.ShouldNotBeNull("stream"); // GZipStream, DeflateStream의 비동기 함수인 BeginRead, BeginWrite 등은 실제로는 StreamExtensions 에서 처리해주고, // 메모리에 다 올라온 byte[]에 대해서 Computed-bound 비동기 방식으로 압축 해제를 수행한다. return stream.ReadAllBytesAsync() .ContinueWith<Stream>(antecedent => new MemoryStream(compressor.DecompressTask(antecedent.Result).Result), TaskContinuationOptions.ExecuteSynchronously); }
/// <summary> /// 대칭형 암호화 알고리즘을 이용하여, <paramref name="plainStream"/>을 암호화하여 스트림으로 반환합니다. /// </summary> /// <param name="encryptor">대칭형 암호화 인스턴스</param> /// <param name="plainStream">원본 스트림</param> /// <returns>암호화된 스트림</returns> public static Stream EncryptStream(this ISymmetricEncryptor encryptor, Stream plainStream) { plainStream.ShouldNotBeNull("plainStream"); return new MemoryStream(encryptor.Encrypt(plainStream.ToBytes())); }
/// <summary> /// 대칭형 암호화 알고리즘을 이용하여, <paramref name="cipherStream"/>을 복호화한 스트림을 반환합니다. /// </summary> /// <param name="encryptor">대칭형 암호화 인스턴스</param> /// <param name="cipherStream">암호화된 정보를 가진 스트림</param> /// <returns>복호화된 정보를 가진 스트림</returns> public static Stream DecryptString(this ISymmetricEncryptor encryptor, Stream cipherStream) { cipherStream.ShouldNotBeNull("cipherStream"); return new MemoryStream(encryptor.Decrypt(cipherStream.ToBytes())); }