麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

【.NET】對文件的對稱加密

2019-11-17 01:26:42
字體:
來源:轉載
供稿:網友
【.NET】對文件的對稱加密
using System;using System.IO;using System.Security.Cryptography;namespace ConsoleApp_SymmetricalEncryption{    class PRogram    {        static void Main(string[] args)        {            SymmetricalEncryption ss = new SymmetricalEncryption();            ss.EncryptFile(@"C:/error.txt", @"C:/error_EncryptFile.txt", ss.Key);            Console.WriteLine("加密成功!");            Console.ReadKey();            ss.DecryptFile(@"C:/error_EncryptFile.txt", @"C:/error_DecryptFile.txt", ss.Key);            Console.WriteLine("解密成功!");            Console.ReadKey();        }    }    /// <summary>    /// 對文件使用對稱加密算法    /// </summary>    public class SymmetricalEncryption    {        /* 對稱加密:          * 需要發送者和接收者協定一個密鑰K,K可以是一個密鑰對,但必須是加密密鑰和解密密鑰之間能夠互相推算出來的。         * 常用的對稱加密算法中,加密解密共享一個密鑰。         * 本例中使用的是同一個密鑰;         *          * 非對稱加密:         * 有一個密鑰對,分別為 公鑰、私鑰(公鑰用來加密,私鑰用來解密)         * 私鑰永遠不需要傳遞給對方;         *                  * 優缺點比較:         * 非對稱加密算法復雜,導致加解密速度慢,只適合與數據量小的場合。         * 對稱加密解密效率高,系統開銷小,適合金星大數據量的加解密。(大文件一般適合使用對稱加密)                  */        /// <summary>        /// 隨機產生的密鑰(也可以自己指定)        /// 【注意:對稱加密算法 加密解密用的Key值是相同的(非對稱加密才分:公鑰和私鑰)】        /// </summary>        public string Key = Guid.NewGuid().ToString().Replace("-", "").ToUpper() + Guid.NewGuid().ToString().Replace("-", "").ToUpper();        /// <summary>        /// 緩沖區大小        /// </summary>        private int bufferSize = 128 * 1024;        /// <summary>        /// 密鑰salt        /// </summary>        private byte[] salt = { 134, 216, 7, 36, 88, 164, 91, 227, 174, 76, 191, 197, 192, 154, 200, 248 };        //salt用來防止窮舉暴力破解(salt是在密鑰導出之前在密碼末尾引入的隨機字節,它使得這類攻擊變得非常困難)        /// <summary>        /// 初始化向量        /// </summary>        private byte[] iv = { 134, 216, 7, 36, 88, 164, 91, 227, 174, 76, 191, 197, 192, 154, 200, 248 };        //初始化向量iv起到的也是增強破解難度的作用        /// <summary>        /// 初始化 并返回對稱加密算法        /// </summary>        /// <param name="argKey"></param>        /// <param name="argSalt"></param>        /// <returns></returns>        private SymmetricAlgorithm CreateRijindael(string argKey, byte[] argSalt)        {            PassWordDeriveBytes pdb = new PasswordDeriveBytes(argKey, argSalt, "SHA256", 1000);            SymmetricAlgorithm sma = Rijndael.Create();            sma.KeySize = 256;            sma.Key = pdb.GetBytes(32);            sma.Padding = PaddingMode.PKCS7;            return sma;        }        /// <summary>        /// 加密文件        /// </summary>        /// <param name="argInFile">輸入文件</param>        /// <param name="argOutFile">輸出加密后的文件</param>        /// <param name="argKey">加密用的Key</param>        public void EncryptFile(string argInFile, string argOutFile, string argKey)        {            using (FileStream inFileStream = File.OpenRead(argInFile),                    outFileStream = File.Open(argOutFile, FileMode.OpenOrCreate))            using (SymmetricAlgorithm algorithm = CreateRijindael(argKey, salt))            {                algorithm.IV = iv;                using (CryptoStream cryptoStream = new CryptoStream(outFileStream, algorithm.CreateEncryptor(),                        CryptoStreamMode.Write))                {                    byte[] bytes = new byte[bufferSize];                    int readSize = -1;                    while ((readSize = inFileStream.Read(bytes, 0, bytes.Length)) != 0)                    {                        cryptoStream.Write(bytes, 0, readSize);                    }                    cryptoStream.Flush();                }            }        }        /// <summary>        /// 解密文件        /// </summary>        /// <param name="argInFile">輸入待解密的文件</param>        /// <param name="argOutFile">輸出解密后的文件</param>        /// <param name="argKey">加密用的Key</param>        public void DecryptFile(string argInFile, string argOutFile, string argKey)        {            try            {                using (FileStream inFileStream = File.OpenRead(argInFile), outFileStream = File.OpenWrite(argOutFile))                using (SymmetricAlgorithm algorithm = CreateRijindael(argKey, salt))                {                    algorithm.IV = iv;                    using (CryptoStream cryptoStream = new CryptoStream(inFileStream, algorithm.CreateDecryptor(),                            CryptoStreamMode.Read))                    {                        byte[] bytes = new byte[bufferSize];                        int readSize = -1;                        int numReads = (int)(inFileStream.Length / bufferSize);                        int slack = (int)(inFileStream.Length % bufferSize);                        for (int i = 0; i < numReads; ++i)                        {                            readSize = cryptoStream.Read(bytes, 0, bytes.Length);                            outFileStream.Write(bytes, 0, readSize);                        }                        if (slack > 0)                        {                            readSize = cryptoStream.Read(bytes, 0, (int)slack);                            outFileStream.Write(bytes, 0, readSize);                        }                        outFileStream.Flush();                    }                }            }            catch (Exception ex)            {                 throw new Exception("解密失敗:" + ex.Message);//可能是密鑰輸入的不正確,或者文件被修改過            }        }    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av日韩一区二区三区 | 蜜桃视频在线免费播放 | 中文字幕极速在线观看 | 91av视频大全 | 亚洲成人福利在线观看 | 毛片视频网站 | 成人午夜天堂 | 成人午夜淫片a | 日韩黄色免费观看 | 精品一区二区在线播放 | 国产精品久久久毛片 | 全视频tv| 免费一级片观看 | 亚洲成人国产 | 亚洲成人久久精品 | 91av久久| 国产高潮国产高潮久久久91 | 在线a毛片免费视频观看 | 男女羞羞视频在线免费观看 | 欧美不卡三区 | 欧美一级毛片特黄黄 | 97超级碰碰人国产在线观看 | 国产在线精品一区二区 | 国产成人高清成人av片在线看 | 在线观看免费毛片视频 | 日本成人一二三区 | 失禁高潮抽搐喷水h | 精品一二三区视频 | 18欧美性xxxx极品hd | 免费看成年人视频在线 | 热99精品视频 | 国产在线区 | 国产一区二区高清在线 | 国产女厕一区二区三区在线视 | 91网视频| 国产美女视频黄a视频免费 日韩黄色在线播放 | 免费一级片观看 | 国产在线一区二区三区 | 毛片在线看免费 | 国产精品久久久久久久久久三级 | 天堂成人一区二区三区 |