使用RijndaelManaged对epub文件进行加密

最近工作中遇到的问题,需要对epub进行加密,浏览了几种加密后最后敲定的使用该方法进行加密解密,自己就稍微写了些,可以实现加密解密,但是里面还有很多不完善的地方。谢谢日志,做做mark,后期继续改进。

不在废话,上源码。


        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="toEncrypt">要加密的内容</param>
        /// <param name="strKey">密钥(16或者32位)</param>
        /// <returns>Base64转码后的密文</returns>
        public static bool Encrypt(string readPath, string writePath, string strKey)
        {
            bool IsSuccess = false;
            if (string.IsNullOrEmpty(readPath))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            if (string.IsNullOrEmpty(writePath))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            if (string.IsNullOrEmpty(strKey))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            try
            {
                //读取要加密的文件
                byte[] toEncryptArray = null;
                using (FileStream readFile = new FileStream(readPath, FileMode.Open, FileAccess.Read))
                {
                    toEncryptArray = new byte[readFile.Length];
                    readFile.Read(toEncryptArray, 0, toEncryptArray.Length);
                    readFile.Seek(0, SeekOrigin.Begin);
                    readFile.Flush();
                    readFile.Close();
                    readFile.Dispose();
                }

                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = UTF8Encoding.UTF8.GetBytes(strKey);            //指定加解密使用的密钥
                rDel.Mode = CipherMode.ECB;                               //设置对称算法的运算模式
                rDel.Padding = PaddingMode.ISO10126;                      //设置填充模式
                ICryptoTransform cTransform = rDel.CreateEncryptor();     //创建解密对象
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);    //加密
                //将加密后的数据写入本地
                using (FileStream fstream = new FileStream(writePath, FileMode.Append, FileAccess.Write))
                {
                    fstream.Write(resultArray, 0, resultArray.Length);
                    fstream.Flush();
                    fstream.Close();
                    fstream.Dispose();
                }
                rDel.Clear();//释放所有使用的资源
                IsSuccess = true;
                return IsSuccess;
            }
            catch (Exception)
            {
                return false;
            }
          
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="readPath">加密文件路径</param>
        /// <param name="writePath">解密后文件存放路径</param>
        /// <param name="strKey">密钥</param>
        public static bool Decrypt(string readPath, string writePath, string strKey)
        {
            bool IsSuccess = false;
            if (string.IsNullOrEmpty(readPath))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            if (string.IsNullOrEmpty(writePath))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            if (string.IsNullOrEmpty(strKey))
            {
                IsSuccess = false;
                return IsSuccess;
            }
            try
            {
                //读取要解密的文件
                byte[] toEncryptArray = null;
                using (FileStream readFile = new FileStream(readPath, FileMode.Open, FileAccess.Read))
                {
                    toEncryptArray = new byte[readFile.Length];
                    readFile.Read(toEncryptArray, 0, toEncryptArray.Length);
                    readFile.Seek(0, SeekOrigin.Begin);
                    readFile.Flush();
                    readFile.Close();
                    readFile.Dispose();
                }
                //声明RijndaelManaged对象 进行加解密操作
                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = UTF8Encoding.UTF8.GetBytes(strKey); //指定加解密使用的密钥
                rDel.Mode = CipherMode.ECB;                    //设置对称算法的运算模式
                rDel.Padding = PaddingMode.ISO10126;           //设置填充模式
                ICryptoTransform cTransform = rDel.CreateDecryptor();   //创建解密对象
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);   //解密
                //将解密后的数据写入本地
                using (FileStream fstream = new FileStream(writePath, FileMode.Append, FileAccess.Write))
                {
                    fstream.Write(resultArray, 0, resultArray.Length);
                    fstream.Flush();
                    fstream.Close();
                    fstream.Dispose();
                }
                rDel.Clear();//释放所有使用的资源
                IsSuccess = true;
                return IsSuccess;
            }
            catch (Exception)
            {
                return false;
            }
        
        }

        前台

 <span style="white-space:pre">	</span>//加密
        [WebMethod]
        public bool FileEn(string filename)
        {
            string key = "597510E19D2D4D7E81604A58AF136B43";
            string path = Server.MapPath("temp\\" + filename + ".epub");
            if (!File.Exists(path))
            {
                return false;
            }
            string TempPath = Server.MapPath("temp\\" + filename + "TEMP.epub");
            return AESEnDe.Encrypt(path, TempPath, key);
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        [WebMethod]
        public bool FileDe(string filename)
        {  
            string key = "597510E19D2D4D7E81604A58AF136B43";
            string path = Server.MapPath("temp\\" + filename + ".epub");
            string TempPath = Server.MapPath("temp\\" + filename + "TEMP.epub");
            if (!File.Exists(TempPath))
            {
                return false;
            }
            return AESEnDe.Decrypt(TempPath, path, key);
        }

我想说我自己也是一知半解。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 VSCode 中使用 EPUB 阅读器,您可以按照以下步骤进行操作: 1. 在 VSCode 中安装 "EPUB Preview" 扩展程序。可以通过在 VSCode 中按下 Ctrl + Shift + X,搜索 "EPUB Preview" 并安装它。 2. 打开 EPUB 文件。在 VSCode 中单击 "文件" 菜单,然后选择 "打开文件"。浏览到您的 EPUB 文件并打开它。 3. 在 "资源管理器" 中,找到已打开的 EPUB 文件,右键单击并选择 "在 EPUB 预览中打开"。 4. EPUB 预览窗口将出现在 VSCode 中,您可以使用它来浏览和阅读 EPUB 文件。在窗口底部有一个工具栏,可以使用它来进行翻页、缩放和调整字体大小等操作。 希望这可以帮助您在 VSCode 中阅读 EPUB 文件。 ### 回答2: 首先,我们需要下载安装 Visual Studio Code (简称 VSCode)。VSCode 是一款免费且开放源代码的代码编辑器,支持 Windows、Linux 和 MacOS 系统。 然后,需要安装相应的插件。在菜单栏中点击“扩展”,在插件市场里搜索 epub,会出现许多相关插件,选择其中一个下载并安装即可。 接着,在菜单栏中选择“文件”->“打开文件”,选择要打开的 epub 文件,此时会发现已经能够在 VSCode 中进行阅读。 除了基本的阅读功能外,epub reader 插件还提供了一些其他的便利功能,例如快速导航、可以自定义主题和字体大小等。 常用的快捷键: - Alt + Left/Right:快速返回/前进上一页/下一页 - Ctrl + G:跳转到指定页 - Ctrl + Alt + P:预览/关闭目录 需要注意的是,epub reader 插件并不会对 .epub 文件进行修改,所有的修改只会对当前打开的文件生效。 总的来说,使用 epub reader 插件可以让我们在 VSCode 中方便地阅读 epub 格式的电子书籍,同时也能够发挥 VSCode 本身的便捷和强大的编辑功能。 ### 回答3: 首先,EPUB是一种电子图书格式,通常用于数字阅读器、平板电脑和其他设备上。在最近的VS Code版本中,已经支持EPUB的阅读和编辑。下面是如何使用EPUB reader在VS Code中打开电子书。 1. 首先,打开Visual Studio Code,如果没有安装,则需要从官方网站上下载并安装。 2. 在Visual Studio Code的左侧栏选择“扩展”,然后搜索“EPUB Reader”,找到并安装扩展。 3. 安装完成后,右键单击要打开的EPUB文件,然后选择“打开方式”>“在VS Code中打开”。 4. 打开后,您可以在阅读器中看到电子书。您可以使用鼠标或键盘上的箭头键来翻页,或者单击左上角的目录图标,然后单击章节目录中的章节名称跳转到指定章节。 5. 要编辑EPUB文件,单击文件顶部菜单栏的“编辑”按钮,然后开始编辑。您可以插入图片、添加、删除或修改内容,或者更改样式。然后,单击“保存”以保存您的更改。 6. 如果您需要查找文本或替换文本,可以使用Ctrl + F或Ctrl + H组合键快键方式,或在顶部工具栏的搜索栏中输入文本。 总之,使用EPUB阅读器在VS Code中打开和编辑EPUB文件是非常简单的。只需安装扩展和打开文件即可。而且,您可以使用VS Code编辑器的所有功能,如代码突出显示,错误突出显示,重构等来对电子书进行编辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值