小编Lev*_*ncz的帖子

重用ICryptoTransform对象

我有一个用于加密文本数据的类。我正在尝试尽可能重用ICryptoTransform对象。但是,第二次尝试使用同一对象时,我得到了部分错误解密的数据。我认为第一个块是错误的,但其余的块似乎还可以(使用更长的文本进行了测试)。

我将类简化为以下内容:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Sample.Crypto
{
    public class EncryptedStreamResolver : IDisposable
    {
        private AesCryptoServiceProvider _cryptoProvider;
        private ICryptoTransform _encryptorTransform;
        private ICryptoTransform _decryptorTransform;

        private ICryptoTransform EncryptorTransform
        {
            get
            {
                if (null == _encryptorTransform || !_encryptorTransform.CanReuseTransform)
                {
                    _encryptorTransform?.Dispose();
                    _encryptorTransform = _cryptoProvider.CreateEncryptor();
                }
                return _encryptorTransform;
            }
        }

        private ICryptoTransform DecryptorTransform
        {
            get
            {
                if (null == _decryptorTransform || !_decryptorTransform.CanReuseTransform)
                {
                    _decryptorTransform?.Dispose();
                    _decryptorTransform = _cryptoProvider.CreateDecryptor();
                }
                return _decryptorTransform;
            }
        }

        public EncryptedStreamResolver()
        {
            GenerateCryptoProvider(); …
Run Code Online (Sandbox Code Playgroud)

c# cryptography cryptostream .net-4.6.2

4
推荐指数
1
解决办法
840
查看次数

标签 统计

.net-4.6.2 ×1

c# ×1

cryptography ×1

cryptostream ×1