使用AES加密标准对文件加密

    /// <summary>
    /// 使用 AES 加密算法替文件进行加密解密的一个类
    /// </summary>
    class AesSecretor : Secretor {
        /// <summary>
        /// AES 加密的机密密钥
        /// </summary>
        private const string strPassKey = "1234567890123456";

        /// <summary>
        /// AES 加密对象
        /// </summary>
        private System.Security.Cryptography.Aes myAes = null;

        /// <summary>
        /// 初始化 Ben.AESSecretor 类的一个新实例
        /// </summary>
        public AesSecretor() { InitializeAES(); }

        /// <summary>
        /// 初始化 myAes 加密对象
        /// </summary>
        private void InitializeAES() {
            byte[] myAesIV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
            byte[] myAesKey = UTF8Encoding.UTF8.GetBytes(strPassKey);

            this.myAes = new AesCryptoServiceProvider();
            this.myAes.IV = myAesIV;
            this.myAes.Key = myAesKey;
        }

        /// <summary>
        /// 使用 AES 对文件进行加密
        /// </summary>
        /// <param name="sourceFileName">要加密的源文件</param>
        /// <param name="enFileName">加密后得到的文件</param>
        public override void EncryptFile(string sourceFileName, string enFileName) {
            //InitializeAES();
            HandleEnDeCrypt(sourceFileName, enFileName, myAes.CreateEncryptor());
        }

        /// <summary>
        /// 使用 AES 对文件进行解密
        /// </summary>
        /// <param name="sourceFileName">要解密的源文件</param>
        /// <param name="deFileName">解密后得到的文件</param>
        public override void DecryptFile(string sourceFileName, string deFileName) {
            //InitializeAES();
            HandleEnDeCrypt(sourceFileName, deFileName, myAes.CreateDecryptor());
        }

        /// <summary>
        /// 处理文件加密(解密)
        /// </summary>
        /// <param name="sFileName">源文件</param>
        /// <param name="getfilename">加密(解密)后的文件</param>
        /// <param name="transform">加密(解密)转换运算</param>
        private void HandleEnDeCrypt(string sFileName, string gfilename, ICryptoTransform transform) {
            if (sFileName == null || gfilename == null) throw new ArgumentNullException();
            else if (!File.Exists(sFileName)) throw new FileNotFoundException();
            else {
                //文件输入输出流
                FileStream myInputStream = null;
                FileStream myOutputStream = null;      
                CryptoStream cryptoStream = null;
                //定义一个缓冲区字节数组
                byte[] insertArr = new byte[1024];

                try {
                    myInputStream = new FileStream(sFileName, FileMode.Open, FileAccess.Read);
                    myOutputStream = new FileStream(gfilename, FileMode.Create, FileAccess.Write);
                    //文件流的总长度
                    long allFileLength = myInputStream.Length;
                    //已读取的流的长度
                    int completedLength = 0;
                    //每次读取的流的长度
                    int readLength = 0;
                    //创建文件加密转换流,开始数据流的转换
                    cryptoStream = new CryptoStream(myOutputStream, transform, CryptoStreamMode.Write);
                    while (completedLength < allFileLength) {
                        readLength = myInputStream.Read(insertArr, 0, insertArr.Length);
                        cryptoStream.Write(insertArr, 0, readLength);
                        completedLength += readLength;
                    }
                }
                catch { throw; }
                finally {
                    //关闭文件流,释放资源
                    if (cryptoStream != null) cryptoStream.Close();
                    if (myOutputStream != null) myOutputStream.Close();
                    if (myInputStream != null) myInputStream.Close();
                }
            }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值