C#DES对较大文件和文件字节数组对象加密解密



  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Security.Cryptography;
  4. using System.IO;
  5. public class Encrypt
  6. {
  7. //DES需要秘钥desKey和desIv向量一起使用加密,它们的要求都是8个数组的字节数组, 如desKey=12345678转成字节数组
  8. private static byte[] desIv = new byte[] { 0xF, 0x56, 0x52, 0xCD, 0xFF, 0x3F, 0x5D, 0x4};
  9. /// <summary>
  10. /// 传入需要加密的文件地址,生成新的加密后的文件
  11. /// </summary>
  12. /// <param name="inFilePath">需要加密的文件路径</param>
  13. /// <param name="outFilePath">生成的加密过的文件</param>
  14. /// <param name="key">加密秘钥</param>
  15. public static void enFile(string inFilePath, string outFilePath, int key)
  16. {
  17. string desKeyStr = key.ToString();
  18. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  19. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  20. FileStream outs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
  21. outs.SetLength( 0);
  22. byte[] buffer = new byte[ 1024* 512];
  23. long readLen = 0;
  24. long totlen = ins.Length;
  25. int len;
  26. DES des = new DESCryptoServiceProvider();
  27. CryptoStream encStream = new CryptoStream(outs, des.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write);
  28. while (readLen < totlen) {
  29. len = ins.Read(buffer, 0, buffer.Length);
  30. encStream.Write(buffer, 0, len);
  31. readLen += len;
  32. }
  33. encStream.Close();
  34. outs.Close();
  35. ins.Close();
  36. }
  37. /// <summary>
  38. /// 传入需要解密的文件地址,生成解密后的文件
  39. /// </summary>
  40. /// <param name="inFilePath">需解密的文件</param>
  41. /// <param name="outFilePath">生成新的解密后的文件</param>
  42. /// <param name="key">秘钥和加密时的一致</param>
  43. public static void deEnFile(string inFilePath, string outFilePath, int key) {
  44. string desKeyStr = key.ToString();
  45. byte[] desKey = System.Text.Encoding.UTF8.GetBytes( desKeyStr.Substring( 0, 8));
  46. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  47. FileStream outs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
  48. outs.SetLength( 0);
  49. byte[] buffer = new byte[ 1024* 512];
  50. long readLen = 0;
  51. long totlLen = ins.Length;
  52. int len;
  53. DES des = new DESCryptoServiceProvider();
  54. CryptoStream dencStream = new CryptoStream(outs, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  55. while (readLen < totlLen) {
  56. len = ins.Read(buffer, 0, buffer.Length);
  57. dencStream.Write(buffer, 0, len);
  58. readLen += len;
  59. }
  60. dencStream.Close();
  61. outs.Close();
  62. ins.Close();
  63. }
  64. /// <summary>
  65. /// 读取文件解密后的字节数组
  66. /// </summary>
  67. /// <param name="inFilePath">需要读取的加密过的文件</param>
  68. /// <param name="key"></param>
  69. /// <returns>返回文件解密过的字节数组对象</returns>
  70. public static byte[] deEnFileByte(string inFilePath, int key)
  71. {
  72. string desKeyStr = key.ToString();
  73. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  74. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  75. MemoryStream ms = new MemoryStream(); //内存流,作为流和字节传送的临时媒介
  76. ms.SetLength( 0);
  77. byte[] buffer = new byte[ 1024 * 512];
  78. long readLen = 0;
  79. long totlLen = ins.Length;
  80. int len;
  81. DES des = new DESCryptoServiceProvider();
  82. CryptoStream dencStream = new CryptoStream(ms, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  83. while (readLen < totlLen)
  84. {
  85. len = ins.Read(buffer, 0, buffer.Length);
  86. dencStream.Write(buffer, 0, len);
  87. readLen += len;
  88. }
  89. byte[] ret = ms.ToArray();
  90. dencStream.Close();
  91. ms.Close();
  92. ins.Close();
  93. return ret;
  94. }
  95. /// <summary>
  96. /// 对字节数组进行加密
  97. /// </summary>
  98. /// <param name="srcBs">需要加密的字节数组对象</param>
  99. /// <param name="key"></param>
  100. /// <returns>返回加密过的字节数组</returns>
  101. public static byte[] enByteToByte(byte[] srcBs, int key)
  102. {
  103. string desKeyStr = key.ToString();
  104. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  105. MemoryStream ins = new MemoryStream(srcBs);
  106. MemoryStream outs = new MemoryStream();
  107. outs.SetLength( 0);
  108. byte[] buffer = new byte[ 1024 * 512];
  109. long readLen = 0;
  110. long totlen = ins.Length;
  111. int len;
  112. DES des = new DESCryptoServiceProvider();
  113. CryptoStream encStream = new CryptoStream(outs, des.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write);
  114. while (readLen < totlen)
  115. {
  116. len = ins.Read(buffer, 0, buffer.Length);
  117. encStream.Write(buffer, 0, len);
  118. readLen += len;
  119. }
  120. encStream.Close();
  121. outs.Close();
  122. ins.Close();
  123. return outs.ToArray();
  124. }
  125. /// <summary>
  126. /// 解密字节数组
  127. /// </summary>
  128. /// <param name="srcBs"></param>
  129. /// <param name="key"></param>
  130. /// <returns></returns>
  131. public static byte[] deEnByteToByte(byte[] srcBs, int key)
  132. {
  133. string desKeyStr = key.ToString();
  134. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  135. MemoryStream ins = new MemoryStream(srcBs);
  136. MemoryStream outs = new MemoryStream();
  137. outs.SetLength( 0);
  138. byte[] buffer = new byte[ 1024 * 512];
  139. long readLen = 0;
  140. long totlen = ins.Length;
  141. int len;
  142. DES des = new DESCryptoServiceProvider();
  143. CryptoStream encStream = new CryptoStream(outs, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  144. while (readLen < totlen)
  145. {
  146. len = ins.Read(buffer, 0, buffer.Length);
  147. encStream.Write(buffer, 0, len);
  148. readLen += len;
  149. }
  150. encStream.Close();
  151. outs.Close();
  152. ins.Close();
  153. return outs.ToArray();
  154. }
  155. }

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Security.Cryptography;
  4. using System.IO;
  5. public class Encrypt
  6. {
  7. //DES需要秘钥desKey和desIv向量一起使用加密,它们的要求都是8个数组的字节数组, 如desKey=12345678转成字节数组
  8. private static byte[] desIv = new byte[] { 0xF, 0x56, 0x52, 0xCD, 0xFF, 0x3F, 0x5D, 0x4};
  9. /// <summary>
  10. /// 传入需要加密的文件地址,生成新的加密后的文件
  11. /// </summary>
  12. /// <param name="inFilePath">需要加密的文件路径</param>
  13. /// <param name="outFilePath">生成的加密过的文件</param>
  14. /// <param name="key">加密秘钥</param>
  15. public static void enFile(string inFilePath, string outFilePath, int key)
  16. {
  17. string desKeyStr = key.ToString();
  18. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  19. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  20. FileStream outs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
  21. outs.SetLength( 0);
  22. byte[] buffer = new byte[ 1024* 512];
  23. long readLen = 0;
  24. long totlen = ins.Length;
  25. int len;
  26. DES des = new DESCryptoServiceProvider();
  27. CryptoStream encStream = new CryptoStream(outs, des.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write);
  28. while (readLen < totlen) {
  29. len = ins.Read(buffer, 0, buffer.Length);
  30. encStream.Write(buffer, 0, len);
  31. readLen += len;
  32. }
  33. encStream.Close();
  34. outs.Close();
  35. ins.Close();
  36. }
  37. /// <summary>
  38. /// 传入需要解密的文件地址,生成解密后的文件
  39. /// </summary>
  40. /// <param name="inFilePath">需解密的文件</param>
  41. /// <param name="outFilePath">生成新的解密后的文件</param>
  42. /// <param name="key">秘钥和加密时的一致</param>
  43. public static void deEnFile(string inFilePath, string outFilePath, int key) {
  44. string desKeyStr = key.ToString();
  45. byte[] desKey = System.Text.Encoding.UTF8.GetBytes( desKeyStr.Substring( 0, 8));
  46. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  47. FileStream outs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
  48. outs.SetLength( 0);
  49. byte[] buffer = new byte[ 1024* 512];
  50. long readLen = 0;
  51. long totlLen = ins.Length;
  52. int len;
  53. DES des = new DESCryptoServiceProvider();
  54. CryptoStream dencStream = new CryptoStream(outs, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  55. while (readLen < totlLen) {
  56. len = ins.Read(buffer, 0, buffer.Length);
  57. dencStream.Write(buffer, 0, len);
  58. readLen += len;
  59. }
  60. dencStream.Close();
  61. outs.Close();
  62. ins.Close();
  63. }
  64. /// <summary>
  65. /// 读取文件解密后的字节数组
  66. /// </summary>
  67. /// <param name="inFilePath">需要读取的加密过的文件</param>
  68. /// <param name="key"></param>
  69. /// <returns>返回文件解密过的字节数组对象</returns>
  70. public static byte[] deEnFileByte(string inFilePath, int key)
  71. {
  72. string desKeyStr = key.ToString();
  73. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  74. FileStream ins = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
  75. MemoryStream ms = new MemoryStream(); //内存流,作为流和字节传送的临时媒介
  76. ms.SetLength( 0);
  77. byte[] buffer = new byte[ 1024 * 512];
  78. long readLen = 0;
  79. long totlLen = ins.Length;
  80. int len;
  81. DES des = new DESCryptoServiceProvider();
  82. CryptoStream dencStream = new CryptoStream(ms, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  83. while (readLen < totlLen)
  84. {
  85. len = ins.Read(buffer, 0, buffer.Length);
  86. dencStream.Write(buffer, 0, len);
  87. readLen += len;
  88. }
  89. byte[] ret = ms.ToArray();
  90. dencStream.Close();
  91. ms.Close();
  92. ins.Close();
  93. return ret;
  94. }
  95. /// <summary>
  96. /// 对字节数组进行加密
  97. /// </summary>
  98. /// <param name="srcBs">需要加密的字节数组对象</param>
  99. /// <param name="key"></param>
  100. /// <returns>返回加密过的字节数组</returns>
  101. public static byte[] enByteToByte(byte[] srcBs, int key)
  102. {
  103. string desKeyStr = key.ToString();
  104. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  105. MemoryStream ins = new MemoryStream(srcBs);
  106. MemoryStream outs = new MemoryStream();
  107. outs.SetLength( 0);
  108. byte[] buffer = new byte[ 1024 * 512];
  109. long readLen = 0;
  110. long totlen = ins.Length;
  111. int len;
  112. DES des = new DESCryptoServiceProvider();
  113. CryptoStream encStream = new CryptoStream(outs, des.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write);
  114. while (readLen < totlen)
  115. {
  116. len = ins.Read(buffer, 0, buffer.Length);
  117. encStream.Write(buffer, 0, len);
  118. readLen += len;
  119. }
  120. encStream.Close();
  121. outs.Close();
  122. ins.Close();
  123. return outs.ToArray();
  124. }
  125. /// <summary>
  126. /// 解密字节数组
  127. /// </summary>
  128. /// <param name="srcBs"></param>
  129. /// <param name="key"></param>
  130. /// <returns></returns>
  131. public static byte[] deEnByteToByte(byte[] srcBs, int key)
  132. {
  133. string desKeyStr = key.ToString();
  134. byte[] desKey = System.Text.Encoding.UTF8.GetBytes(desKeyStr.Substring( 0, 8));
  135. MemoryStream ins = new MemoryStream(srcBs);
  136. MemoryStream outs = new MemoryStream();
  137. outs.SetLength( 0);
  138. byte[] buffer = new byte[ 1024 * 512];
  139. long readLen = 0;
  140. long totlen = ins.Length;
  141. int len;
  142. DES des = new DESCryptoServiceProvider();
  143. CryptoStream encStream = new CryptoStream(outs, des.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);
  144. while (readLen < totlen)
  145. {
  146. len = ins.Read(buffer, 0, buffer.Length);
  147. encStream.Write(buffer, 0, len);
  148. readLen += len;
  149. }
  150. encStream.Close();
  151. outs.Close();
  152. ins.Close();
  153. return outs.ToArray();
  154. }
  155. }

猜你喜欢

转载自blog.csdn.net/bruce135lee/article/details/80867063