コード例 #1
0
        public async Task WriteReadData()
        {
            const string fileName = "hello.txt";
            Random       rand     = new Random(156);

            byte[] data = new byte[1024 * 156];
            rand.NextBytes(data);

            IRsaCryptoAccessor p12CryptoAccessor = this.CreateAccesor();

            using MemoryStream writeMs = new MemoryStream();
            using (ContainerWriter writer = new ContainerWriter(writeMs, fileName, await p12CryptoAccessor.ExtractPublicCertificate()))
            {
                await writer.Write(data, 0, data.Length);
            }

            using MemoryStream readMs = new MemoryStream(writeMs.ToArray());

            using (ContainerReader reader = new ContainerReader(readMs, p12CryptoAccessor))
            {
                string decodedFileName = await reader.ReadFileName();

                Assert.AreEqual(fileName, decodedFileName, "Decoded file name");
                using Stream contentStream = await reader.GetContentStream();

                using MemoryStream buffer = new MemoryStream(data.Length + 10);
                await contentStream.CopyToAsync(buffer);

                byte[] decryptedData = buffer.ToArray();

                Assert.AreEqual(data.Length, decryptedData.Length);
                CollectionAssert.AreEquivalent(data, decryptedData);
            }
        }
コード例 #2
0
        public ContainerReader(Stream readStream, IRsaCryptoAccessor cryptoAccessor)
        {
            if (readStream == null)
            {
                throw new ArgumentNullException(nameof(readStream));
            }

            if (cryptoAccessor == null)
            {
                throw new ArgumentNullException(nameof(cryptoAccessor));
            }

            this.readerStream   = readStream;
            this.cryptoAccessor = cryptoAccessor;
            this.fileName       = null;
            this.aes            = new AesManaged();

            this.aes.Mode      = CipherMode.CBC;
            this.aes.Padding   = PaddingMode.PKCS7;
            this.aes.KeySize   = 256;
            this.aes.BlockSize = 128;
        }