对称加密之AES及压缩加密解密解压综合实战

对称加密:就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

由此可见密钥传递也是比较重要的一环,一般都是通过对密钥二次加密的方式,进行密钥的传输

加密实现代码:

  1. public static byte[] encryptStringToBytes_AES(byte[] fileContentBytes, byte[] Key, byte[] IV)
  2. {
  3. // Check arguments.
  4. if (fileContentBytes == null || fileContentBytes.Length <= 0)
  5. throw new ArgumentNullException("plainText");
  6. if (Key == null || Key.Length <= 0)
  7. throw new ArgumentNullException("Key");
  8. if (IV == null || IV.Length <= 0)
  9. throw new ArgumentNullException("IV");
  10. MemoryStream msEncrypt = null;
  11. AesCryptoServiceProvider aesAlg = null;
  12. try
  13. {
  14. aesAlg = new AesCryptoServiceProvider();
  15. aesAlg.Padding = PaddingMode.PKCS7;
  16. aesAlg.Key = Key;
  17. aesAlg.IV = IV;
  18. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
  19. msEncrypt = new MemoryStream();
  20. using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
  21. {
  22. csEncrypt.Write(fileContentBytes, 0, fileContentBytes.Length);
  23. csEncrypt.FlushFinalBlock();
  24. }
  25. }
  26. catch (Exception ex)
  27. {
  28. }
  29. finally
  30. {
  31. if (aesAlg != null)
  32. aesAlg.Clear();
  33. }
  34. return msEncrypt.ToArray();
  35. }

解密代码实现:

  1. public static byte[] decryptBytes(byte[] cipherText, byte[] Key, byte[] IV)
  2. {
  3. if (cipherText == null || cipherText.Length <= 0)
  4. throw new ArgumentNullException("cipherText");
  5. if (Key == null || Key.Length <= 0)
  6. throw new ArgumentNullException("Key");
  7. if (IV == null || IV.Length <= 0)
  8. throw new ArgumentNullException("IV");
  9. AesCryptoServiceProvider aesAlg = null;
  10. byte[] buffer = null;
  11. try
  12. {
  13. using (aesAlg = new AesCryptoServiceProvider())
  14. {
  15. aesAlg.Padding = PaddingMode.PKCS7;
  16. aesAlg.Key = Key;
  17. aesAlg.IV = IV;
  18. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
  19. using (MemoryStream msDecrypt = new MemoryStream(cipherText))
  20. {
  21. CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
  22. byte[] tempbuffer = new byte[cipherText.Length];
  23. int totalBytesRead = csDecrypt.Read(tempbuffer, 0, tempbuffer.Length);
  24. buffer = tempbuffer.Take(totalBytesRead).ToArray();
  25. }
  26. }
  27. }
  28. catch (Exception ex)
  29. {
  30. }
  31. finally
  32. {
  33. if (aesAlg != null)
  34. aesAlg.Clear();
  35. }
  36. return buffer;
  37. }

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

  1. /// <summary>
  2. /// 加密解密
  3. /// </summary>
  4. private static void _EncryptAndDecrypt()
  5. {
  6. ASCIIEncoding asciiEnc = new ASCIIEncoding();
  7. byte[] initVectorBytes = asciiEnc.GetBytes("@1B2c3D4e5F6g7H8");
  8. //Randomly generate or Book key - key K2 - Key to encrypt xml content
  9. string keyK2 = Generator.RandomString(10);
  10. //Generate the 128 bit string using MD5 for key K2
  11. MD5 hashProvider = MD5.Create();
  12. byte[] md5EncryptedKeyK2 = hashProvider.ComputeHash(asciiEnc.GetBytes(keyK2));
  13. string filename = "NewTextDocument.txt";
  14. string filepath = Environment.CurrentDirectory + "//" + filename;
  15. byte[] Content = Encryption.encryptStringToBytes_AES(File.ReadAllBytes(filepath), md5EncryptedKeyK2, initVectorBytes);
  16. string encryptfilepath = Environment.CurrentDirectory + "//encrypt" + filename;
  17. File.WriteAllBytes(encryptfilepath, Content);
  18. byte[] decryptContent = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), md5EncryptedKeyK2, initVectorBytes);
  19. string decryptfilepath = Environment.CurrentDirectory + "//decrypt" + filename;
  20. File.WriteAllBytes(decryptfilepath, decryptContent);
  21. }

压缩解压:

  1. string filename = "NewTextDocument.txt";
  2. string filepath = Environment.CurrentDirectory + "//" + filename;
  3. string zipfilepath = Environment.CurrentDirectory + "//NewTextDocument.zip";
  4. using (ZipFile contentZip = new ZipFile())
  5. {
  6. //压缩
  7. contentZip.AlternateEncoding = Encoding.GetEncoding("iso-8859-1");
  8. contentZip.AlternateEncodingUsage = ZipOption.Always;
  9. ZipEntry contentFile = contentZip.AddEntry(filename, File.ReadAllBytes(filepath));
  10. contentZip.Save(zipfilepath);
  11. //解压
  12. contentZip.ExtractAll(Environment.CurrentDirectory);
  13. }

压缩加密解密解压:

  1. string filename = "NewTextDocument.zip";
  2. string filepath = Environment.CurrentDirectory + "//" + filename;
  3. string zipfilepath = Environment.CurrentDirectory + "//" + filename;
  4. ZipFile contentZip = new ZipFile();
  5. contentZip.AlternateEncoding = Encoding.GetEncoding("iso-8859-1");
  6. contentZip.AlternateEncodingUsage = ZipOption.Always;
  7. var bytecontent = File.ReadAllBytes(Environment.CurrentDirectory + "//NewTextDocument.txt");
  8. ZipEntry contentFile = contentZip.AddEntry("NewTextDocument.txt", bytecontent);
  9. contentZip.Save(zipfilepath);
  10. ASCIIEncoding asciiEnc = new ASCIIEncoding();
  11. byte[] initVectorBytes = asciiEnc.GetBytes("@1B2c3D4e5F6g7H8");
  12. //Randomly generate or Book key - key K2 - Key to encrypt xml content
  13. string keyK2 = Generator.RandomString(10);
  14. //Generate the 128 bit string using MD5 for key K2
  15. MD5 hashProvider = MD5.Create();
  16. byte[] md5EncryptedKeyK2 = hashProvider.ComputeHash(asciiEnc.GetBytes(keyK2));
  17. byte[] Content = Encryption.encryptStringToBytes_AES(File.ReadAllBytes(filepath), md5EncryptedKeyK2, initVectorBytes);
  18. string encryptfilepath = Environment.CurrentDirectory + "//encrypt" + filename;
  19. File.WriteAllBytes(encryptfilepath, Content);
  20. byte[] decryptContent = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), md5EncryptedKeyK2, initVectorBytes);
  21. string decryptfilepath = Environment.CurrentDirectory + "//decrypt" + filename;
  22. File.WriteAllBytes(decryptfilepath, decryptContent);
  23. contentZip.ExtractAll(Environment.CurrentDirectory + "//unzip//decrypt");
  24. string key = Convert.ToBase64String(md5EncryptedKeyK2);
  25. string iv = Convert.ToBase64String(initVectorBytes);
  26. Console.WriteLine(key);
  27. Console.WriteLine(iv);
  28. byte[] decryptContent1 = Encryption.decryptBytes(File.ReadAllBytes(encryptfilepath), Convert.FromBase64String(key), Convert.FromBase64String(iv));
  29. string decryptfilepath1 = Environment.CurrentDirectory + "//decrypt1" + filename;
  30. contentZip.ExtractAll(Environment.CurrentDirectory + "//unzip//decrypt1");
  31. File.WriteAllBytes(decryptfilepath1, decryptContent1);

(0)

相关推荐

  • 不可预料的压缩文件末端解压出错解决方法

    "不可预料的压缩文件末端"多出现于压缩文件未下载完成,由于服务器失去响应,导致系统误以为文件已经下载完毕,将不完整的文件当成了完整的.建议把文件删除了重新下载,如果始终有问题则是资 ...

  • Win10电脑中的rar压缩文件如何解压

    今天给大家介绍一下Win10电脑中的rar压缩文件如何解压的具体操作步骤.1. 打开电脑,找到想要解压的文件.2. 在文件上,双击打开,在弹出的询问窗口,选择在应用商店中查找应用的选项,点击.3. 然 ...

  • 360压缩软件怎么解压文件

    360压缩软件是我们常用的解压软件之一,有小伙伴问怎么解压文件,下面小编介绍一下.具体如下:1. 双击要解压的文件,打开解压窗口,选择上方的"解压到"选项2. 弹出窗口,点击后面的 ...

  • 分卷压缩文件怎么解压

    有些是有,由于文件过大而不利于存储的时候,我们通常会采用分卷压缩文件的方式来得到解决.那么分卷压缩文件怎么解压?这是很多电脑新手朋友会比较疑惑的问题.尽管解压不难,但由于分卷压缩文件往往很大,并且数据 ...

  • 压缩文件怎么解压

    文件压缩工具是一个非常好的工具,可以帮助我们把大的文件压缩小一点,方便在网上传输,但是有些小伙伴还不怎么会使用压缩工具. 操作方法 01 下载解压软件 在电脑上下载了也说文件却没有办法打开,则是后就需 ...

  • 360压缩正式版解压到临时文件夹的位置在哪设置

    对于喜欢解压的人来说,压缩以后,找不到跑到哪了 是一件很麻烦的事情,我们一起来看看如何解决吧. 操作方法 01 首先,我们用的是正式版本的,如果用的不是这个版本的话,可以看看用一下这个正式版本的. 0 ...

  • 压缩文件怎样解压

    现在我们网上下载的文件,或者好友给我们传过来的文件,大多数是压缩以后给我们传过来的,我们怎么解压这个压缩文件呢?当然需要你的电脑上安装有解压缩软件,比如Winrar,Winzip等等,如果没有你可以自 ...

  • WinRar压缩文件无法解压怎么办

    Winrar压缩文件可以以更小的体积存储更多的信息,当压缩文件损坏时,我们可以使用以下方法来修改受损的压缩文件. 操作方法 01 右击已损坏的压缩文件,从弹出的菜单中选择"打开"项 ...

  • 压缩文件怎么解压?

    操作方法 01 1.压缩文件 首先选中需要进行压缩的文件或文件夹,然后点击鼠标右键,选择"发送到→压缩(zippde)文件夹"命令,便可自动将文件或文件夹进行压缩了. 2.解压缩文 ...