LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例

admin
2023年3月22日 18:28 本文热度 523

这篇文章主要介绍了C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例,每次解密时从密文中截取前16位,这就是实现随机的奥秘,本文同时给出了实现代码,需要的朋友可以参考下。

思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量。

代码:

  1. public static string Encrypt(string plainText, string AESKey) 

  2. RijndaelManaged rijndaelCipher = new RijndaelManaged(); 

  3. byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组 

  4. rijndaelCipher.Key = Convert.fromBase64String(AESKey);//加解密双方约定好密钥:AESKey 

  5. rijndaelCipher.GenerateIV(); 

  6. byte[] keyIv = rijndaelCipher.IV; 

  7. byte[] cipherBytes = null

  8. using (MemoryStream ms = new MemoryStream()) 

  9. using (CryptoStream cs = new CryptoStream(ms, rijndaelCipher.createEncryptor(), CryptoStreamMode.Write)) 

  10. cs.Write(inputByteArray, 0, inputByteArray.Length); 

  11. cs.FlushFinalBlock(); 

  12. cipherBytes = ms.ToArray();//得到加密后的字节数组 

  13. cs.Close(); 

  14. ms.Close(); 

  15. var allEncrypt = new byte[keyIv.Length + cipherBytes.Length]; 

  16. Buffer.BlockCopy(keyIv, 0, allEncrypt, 0, keyIv.Length); 

  17. Buffer.BlockCopy(cipherBytes, 0, allEncrypt, keyIv.Length * sizeof(byte), cipherBytes.Length); 

  18. return Convert.ToBase64String(allEncrypt); 

  19.  

  20. public static string Decrypt(string showText, string AESKey) 

  21. string result = string.Empty; 

  22. try 

  23. byte[] cipherText = Convert.fromBase64String(showText); 

  24. int length = cipherText.Length; 

  25. SymmetricAlgorithm rijndaelCipher = Rijndael.create(); 

  26. rijndaelCipher.Key = Convert.fromBase64String(AESKey);//加解密双方约定好的密钥 

  27. byte[] iv = new byte[16]; 

  28. Buffer.BlockCopy(cipherText, 0, iv, 0, 16); 

  29. rijndaelCipher.IV = iv; 

  30. byte[] decryptBytes = new byte[length - 16]; 

  31. byte[] passwdText = new byte[length - 16]; 

  32. Buffer.BlockCopy(cipherText, 16, passwdText, 0, length - 16); 

  33. using (MemoryStream ms = new MemoryStream(passwdText)) 

  34. using (CryptoStream cs = new CryptoStream(ms, rijndaelCipher.createDecryptor(), CryptoStreamMode.Read)) 

  35. cs.Read(decryptBytes, 0, decryptBytes.Length); 

  36. cs.Close(); 

  37. ms.Close(); 

  38. result = Encoding.UTF8.GetString(decryptBytes).Replace("/0"""); ///将字符串后尾的'/0'去掉 

  39. catch { } 

  40. return result; 

调用: 

  1. string jiaMi = MyAESTools.Encrypt(textBox1.Text, "abcdefgh12345678abcdefgh12345678"); 

  2.  

  3. string jieMi = MyAESTools.Decrypt(textBox3.Text, "abcdefgh12345678abcdefgh12345678"); 


该文章在 2023/3/22 18:28:42 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved