zoukankan      html  css  js  c++  java
  • 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    1. AES
    2. 压缩解压
    3. 压缩加密解密解压

    对称加密:

    就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
     
    因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
     
     
    由此可见密钥传递也是比较重要的一环,一般都是通过对密钥二次加密的方式,进行密钥的传输
     
    加密实现代码:
     
            public static byte[] encryptStringToBytes_AES(byte[] fileContentBytes, byte[] Key, byte[] IV)
            {
                // Check arguments.
                if (fileContentBytes == null || fileContentBytes.Length <= 0)
                    throw new ArgumentNullException("plainText");
                if (Key == null || Key.Length <= 0)
                    throw new ArgumentNullException("Key");
                if (IV == null || IV.Length <= 0)
                    throw new ArgumentNullException("IV");
                MemoryStream msEncrypt = null;
                AesCryptoServiceProvider aesAlg = null;
                try
                {
                    aesAlg = new AesCryptoServiceProvider();
    
                    aesAlg.Padding = PaddingMode.PKCS7;
                    aesAlg.Key = Key;
                    aesAlg.IV = IV;
    
                    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
    
                    msEncrypt = new MemoryStream();
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        csEncrypt.Write(fileContentBytes, 0, fileContentBytes.Length);
                        csEncrypt.FlushFinalBlock();
                    }
                }
                catch (Exception ex)
                {
    
                }
                finally
                {
                    if (aesAlg != null)
                        aesAlg.Clear();
                }
                return msEncrypt.ToArray();
            }
    

    解密代码实现:


            public static byte[] decryptBytes(byte[] cipherText, byte[] Key, byte[] IV)
            {
                if (cipherText == null || cipherText.Length <= 0)
                    throw new ArgumentNullException("cipherText");
                if (Key == null || Key.Length <= 0)
                    throw new ArgumentNullException("Key");
                if (IV == null || IV.Length <= 0)
                    throw new ArgumentNullException("IV");
                AesCryptoServiceProvider aesAlg = null;
                byte[] buffer = null;
                try
                {
                    using (aesAlg = new AesCryptoServiceProvider())
                    {
                        aesAlg.Padding = PaddingMode.PKCS7;
                        aesAlg.Key = Key;
                        aesAlg.IV = IV;
                        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
    
                        using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                        {
                            CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
                            byte[] tempbuffer = new byte[cipherText.Length];
                            int totalBytesRead = csDecrypt.Read(tempbuffer, 0, tempbuffer.Length);
                            buffer = tempbuffer.Take(totalBytesRead).ToArray();
                        }
                    }
                }
                catch (Exception ex)
                {
    
                }
                finally
                {
                    if (aesAlg != null)
                        aesAlg.Clear();
                }
                return buffer;
            }
    

    客户端加密解密文本文件实战:


            /// <summary>
            /// 加密解密
            /// </summary>
            private static void _EncryptAndDecrypt()
            {
                ASCIIEncoding asciiEnc = new ASCIIEncoding();
                byte[] initVectorBytes = asciiEnc.GetBytes("@1B2c3D4e5F6g7H8");
    
                //Randomly generate or Book key - key K2 - Key to encrypt xml content
                string keyK2 = Generator.RandomString(10);
                //Generate the 128 bit string using MD5 for key K2
                MD5 hashProvider = MD5.Create();
                byte[] md5EncryptedKeyK2 = hashProvider.ComputeHash(asciiEnc.GetBytes(keyK2));
    
                string filename = "NewTextDocument.txt";
                string filepath = Environment.CurrentDirectory + "\" + filename;
    
                byte[] Content = Encryption.encryptStringToBytes_AES(File.ReadAllBytes(filepath), md5EncryptedKeyK2, initVectorBytes);
                string encryptfilepath = Environment.CurrentDirectory + "\encrypt" + filename;
                File.WriteAllBytes(encryptfilepath, Content);
    
                byte[] decryptContent = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), md5EncryptedKeyK2, initVectorBytes);
                string decryptfilepath = Environment.CurrentDirectory + "\decrypt" + filename;
                File.WriteAllBytes(decryptfilepath, decryptContent);
    
            }
    

    压缩解压:


                string filename = "NewTextDocument.txt";
                string filepath = Environment.CurrentDirectory + "\" + filename;
                string zipfilepath = Environment.CurrentDirectory + "\NewTextDocument.zip";
                using (ZipFile contentZip = new ZipFile())
                {
                    //压缩
                    contentZip.AlternateEncoding = Encoding.GetEncoding("iso-8859-1");
                    contentZip.AlternateEncodingUsage = ZipOption.Always;
                    ZipEntry contentFile = contentZip.AddEntry(filename, File.ReadAllBytes(filepath));
                    contentZip.Save(zipfilepath);
    
    
                    //解压
                    contentZip.ExtractAll(Environment.CurrentDirectory);
                }
    

    压缩加密解密解压:


     string filename = "NewTextDocument.zip";
    
                string filepath = Environment.CurrentDirectory + "\" + filename;
                string zipfilepath = Environment.CurrentDirectory + "\" + filename;
    
                ZipFile contentZip = new ZipFile();
    
                contentZip.AlternateEncoding = Encoding.GetEncoding("iso-8859-1");
                contentZip.AlternateEncodingUsage = ZipOption.Always;
                var bytecontent = File.ReadAllBytes(Environment.CurrentDirectory + "\NewTextDocument.txt");
                ZipEntry contentFile = contentZip.AddEntry("NewTextDocument.txt", bytecontent);
                contentZip.Save(zipfilepath);
    
                ASCIIEncoding asciiEnc = new ASCIIEncoding();
                byte[] initVectorBytes = asciiEnc.GetBytes("@1B2c3D4e5F6g7H8");
    
                //Randomly generate or Book key - key K2 - Key to encrypt xml content
                string keyK2 = Generator.RandomString(10);
                //Generate the 128 bit string using MD5 for key K2
                MD5 hashProvider = MD5.Create();
                byte[] md5EncryptedKeyK2 = hashProvider.ComputeHash(asciiEnc.GetBytes(keyK2));
    
                byte[] Content = Encryption.encryptStringToBytes_AES(File.ReadAllBytes(filepath), md5EncryptedKeyK2, initVectorBytes);
                string encryptfilepath = Environment.CurrentDirectory + "\encrypt" + filename;
                File.WriteAllBytes(encryptfilepath, Content);
    
                byte[] decryptContent = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), md5EncryptedKeyK2, initVectorBytes);
                string decryptfilepath = Environment.CurrentDirectory + "\decrypt" + filename;
                File.WriteAllBytes(decryptfilepath, decryptContent);
    
                contentZip.ExtractAll(Environment.CurrentDirectory + "\unzip\decrypt");
                string key = Convert.ToBase64String(md5EncryptedKeyK2);
                string iv = Convert.ToBase64String(initVectorBytes);
                Console.WriteLine(key);
                Console.WriteLine(iv);
    
                byte[] decryptContent1 = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), Convert.FromBase64String(key), Convert.FromBase64String(iv));
                string decryptfilepath1 = Environment.CurrentDirectory + "\decrypt1" + filename;
    
                contentZip.ExtractAll(Environment.CurrentDirectory + "\unzip\decrypt1");
    
                File.WriteAllBytes(decryptfilepath1, decryptContent1);
    

     

    参考文章:NET对称加密体系

    下载地址

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/4367027.html
Copyright © 2011-2022 走看看