首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CryptoStream解密文件,但阻止写入文件

使用CryptoStream解密文件,但阻止写入文件
EN

Stack Overflow用户
提问于 2018-05-16 19:42:58
回答 1查看 192关注 0票数 0

不久前,我开始编写自己的AES应用程序,以了解更多关于加密的知识。我设法让整个应用程序正常工作,除了一件我仍在努力的事情。

它是这样的场景:当用户想要解密文件时,用户必须输入用于解密文件的密码。但是,当用户输入错误的密码时,解密应该会失败。我知道当CryptoStream抛出一个CryptoGraphicException时,它意味着出了问题,在本例中是用错误的密码解密的。我会给出这样的消息:“填充是无效的,无法删除”。

问题是,当用户使用错误的密码进行解密时,它仍然会写入一个包含解密内容的新文件。我真的很想阻止它,因为它显然改变了加密文件的内容,使其无法再次解密。

我的解密代码是这样的:

代码语言:javascript
复制
            using (AesManaged aesManaged = new AesManaged())
            {
            //Console.WriteLine("Decrypting file using " + aesManaged.Mode + ", block size " + aesManaged.BlockSize + " and padding mode " + aesManaged.Padding + "...");

            byte[] salt = GetSaltFromCiphertext(cipherText);
            byte[] initializationVector = GetInitializationVectorFromCiphertext(cipherText);
            byte[] fileContentToDecrypt = GetContentFromCiphertext(cipherText);

            //Initialize the AES instance with the key and the initialization vector
            aesManaged.Key = GenerateKey(password, salt);
            aesManaged.IV = initializationVector;

            using (FileStream fileStream = new FileStream("../../Files/" + fileNameAndExtension, FileMode.Create))
            {
                using (CryptoStream cryptoStream = new CryptoStream(fileStream, aesManaged.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(fileContentToDecrypt, 0, fileContentToDecrypt.Length);
                }
            }
            }

当用户使用错误的密码进行解密时,如何防止CryptoStream或FileStream向文件中写入任何内容?我正在使用PBKDF2从密码生成加密密钥。

EN

回答 1

Stack Overflow用户

发布于 2018-05-17 15:13:37

我通过使用MemoryStream而不是FileStream找到了解决方案。这确保了当密码流抛出异常时,它还没有向文件流中写入任何内容。密文将位于内存流中,如果解密顺利,则可以将密文写入文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50370035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档