DES加密解密

作者:追风剑情 发布于:2017-6-2 17:36 分类:C#

转载: http://blog.csdn.net/tammy520/article/details/23434931


  1. public class DESCrypto
  2. {
  3. private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
  4. private static string KEY = "abcdefgh";
  5.  
  6. ///<summary>
  7. ///DES加密字符串
  8. ///</summary>
  9. ///<param name="encryptString">待加密的字符串</param>
  10. ///<param name="encryptKey">加密密钥,要求为8位</param>
  11. ///<returns>加密成功返回加密后的字符串,失败返回源串</returns>
  12. public static string Encrypt(string encryptString, string encryptKey = "")
  13. {
  14. try
  15. {
  16. if (string.IsNullOrEmpty(encryptKey))
  17. encryptKey = KEY;
  18. byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
  19. byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
  20. byte[] bytes = Encrypt(inputByteArray, rgbKey);
  21. return Convert.ToBase64String(bytes);
  22. }
  23. catch (Exception e)
  24. {
  25. return encryptString;
  26. }
  27. }
  28.  
  29. public static byte[] Encrypt(byte[] inputByteArray, byte[] rgbKey)
  30. {
  31. try
  32. {
  33. byte[] rgbIV = Keys;
  34. DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
  35. MemoryStream mStream = new MemoryStream();
  36. CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
  37. cStream.Write(inputByteArray, 0, inputByteArray.Length);
  38. cStream.FlushFinalBlock();
  39. cStream.Close();
  40. return mStream.ToArray();
  41. }
  42. catch (Exception e)
  43. {
  44. return inputByteArray;
  45. }
  46. }
  47.  
  48. ///<summary>
  49. ///DES解密字符串
  50. ///</summary>
  51. ///<param name="decryptString">待解密的字符串</param>
  52. ///<param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
  53. ///<returns>解密成功返回解密后的字符串,失败返源串</returns>
  54. public static string Decrypt(string decryptString, string decryptKey = "")
  55. {
  56. try
  57. {
  58. if (string.IsNullOrEmpty(decryptKey))
  59. decryptKey = KEY;
  60. byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
  61. byte[] inputByteArray = Convert.FromBase64String(decryptString);
  62. byte[] bytes = Decrypt(inputByteArray, rgbKey);
  63. return Encoding.UTF8.GetString(bytes);
  64. }
  65. catch (Exception e)
  66. {
  67. return decryptString;
  68. }
  69. }
  70.  
  71. public static byte[] Decrypt(byte[] inputByteArray, byte[] rgbKey)
  72. {
  73. try
  74. {
  75. byte[] rgbIV = Keys;//加密和解密必须使用相同的IV和Key
  76. DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
  77. MemoryStream mStream = new MemoryStream();
  78. CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
  79. cStream.Write(inputByteArray, 0, inputByteArray.Length);
  80. cStream.FlushFinalBlock();
  81. cStream.Close();
  82. return mStream.ToArray();
  83. }
  84. catch (Exception e)
  85. {
  86. return inputByteArray;
  87. }
  88. }
  89.  
  90. ///<summary>
  91. /// 随机生成一个初始向量(IV)
  92. ///</summary>
  93. public static byte[] RandomIV()
  94. {
  95. byte[] randomBytes = new byte[8];
  96. System.Security.Cryptography.RNGCryptoServiceProvider rngServiceProvider = new System.Security.Cryptography.RNGCryptoServiceProvider();
  97. rngServiceProvider.GetBytes(randomBytes);
  98. return randomBytes;
  99. }
  100.  
  101. //生成一个随机key
  102. public static string RandomKey()
  103. {
  104. //ASCII码可显示字符范围
  105. int ASCII_MIN = 32;
  106. int ASCII_MAX = 126;
  107. char[] chars = new char[8];
  108. long tick = DateTime.Now.Ticks;
  109. System.Random rand = new System.Random();
  110. for (int i = 0; i < 8; i++)
  111. {
  112. char c = (char)rand.Next(ASCII_MIN, ASCII_MAX);
  113. chars[i] = c;
  114. }
  115. string key = new string(chars);
  116. return key;
  117. }
  118. }


这个类已在Unity项目中使用。


标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号