首页 > 解决方案 > 如何验证文件的 AesManaged 加密

问题描述

我使用 AesManaged/CryptoStream 根据密码加密文件。

        public static void EncryptStream(Stream streamToEncrypt, Stream outPutStream, string password)
        {
            SaltAndKey saltAndKey = PasswordAsByte(password);
            // writes salt
            outPutStream.Write(saltAndKey.SaltAsBytes, 0, SaltLenght);

            using (AesManaged aesAlg = new AesManaged())
            {
                aesAlg.Mode = AesCipherMode; //CBC
                aesAlg.Key = saltAndKey.KeyAsBytes;
                // writes vector
                outPutStream.Write(aesAlg.IV, 0, IvLenght);
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                using (CryptoStream csEncrypt = new CryptoStream(outPutStream, encryptor, CryptoStreamMode.Write))
                {
                    int data;

                    data = streamToEncrypt.ReadByte();
                    while ((data > -1))
                    {
                        csEncrypt.WriteByte(System.Convert.ToByte(data));
                        data = streamToEncrypt.ReadByte();
                    }
                    if (csEncrypt.HasFlushedFinalBlock)
                        csEncrypt.FlushFinalBlock();
                }
            }
        }

这有效,我能够毫无问题地解密文件。

我现在需要检测加密文件是否被更改。一种方法是解密整个文件,但要检查大量文件,这是一项相当昂贵的操作。

有没有其他方法可以验证我能够在不实际解密的情况下解密文件?

标签: c#encryption

解决方案


推荐阅读