• 对称加密之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对称加密体系

    下载地址

  • 相关阅读:
    A Bug's Life-----poj2492(关系并查集)
    食物链--poj1182(并查集含有关系)
    How Many Answers Are Wrong----hdu3038(并查集)
    Parity game---poj1733
    使用FFmpeg类库实现YUV视频序列编码为视频
    JNA调用DLL函数遇到的几个问题
    从一个MFC工程移植对话框类到另一个MFC工程
    X264 输出的统计值的含义(X264 Stats Output)
    毕业生必知二三事。给即将毕业的师弟师妹看看,很有用的~~~~
    网络视频传输的服务质量(QoS)
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/4367027.html
Copyright © 2020-2023  润新知