1. public class DESCrypto
  2. {
  3. /// <summary>
  4. /// 初始化des实例秘钥及向量
  5. /// </summary>
  6. /// <param name="key"></param>
  7. /// <returns></returns>
  8. private static DESCryptoServiceProvider InitDESInstance(string key)
  9. {
  10. DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  11. byte[] salt = new byte[] { 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xF1 };
  12. byte[] keyByte = Encoding.UTF8.GetBytes(key);
  13. Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(keyByte, salt, );
  14. Rfc2898DeriveBytes rfcIv = new Rfc2898DeriveBytes("", salt, );
  15. des.Key = rfcKey.GetBytes();
  16. des.IV = rfcIv.GetBytes();
  17. return des;
  18. }
  19.  
  20. #region 基于Base64的加密解密(不其他格式的加解密方法配合使用)
  21. /// <summary>
  22. /// 基于Base64
  23. /// </summary>
  24. /// <param name="plaintext"></param>
  25. /// <param name="key"></param>
  26. /// <returns></returns>
  27. public static string DESEncryptBase64(string plaintext,string key)
  28. {
  29. DESCryptoServiceProvider des = InitDESInstance(key);
  30. byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext);
  31. string ciphertext = "";
  32. using (MemoryStream ms = new MemoryStream())
  33. using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
  34. {
  35. cs.Write(dataByteArray, , dataByteArray.Length);
  36. cs.FlushFinalBlock();
  37. ciphertext = Convert.ToBase64String(ms.ToArray());
  38. }
  39. return ciphertext;
  40. }
  41.  
  42. /// <summary>
  43. /// 基于Base64
  44. /// </summary>
  45. /// <param name="encrypt"></param>
  46. /// <param name="key"></param>
  47. /// <returns></returns>
  48. public static string DESDecryptBase64(string encrypt, string key)
  49. {
  50. DESCryptoServiceProvider des = InitDESInstance(key);
  51. byte[] dataByteArray = Convert.FromBase64String(encrypt);
  52. using (MemoryStream ms = new MemoryStream())
  53. using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
  54. {
  55. cs.Write(dataByteArray, , dataByteArray.Length);
  56. cs.FlushFinalBlock();
  57. return Encoding.UTF8.GetString(ms.ToArray());
  58. }
  59. }
  60. #endregion
  61.  
  62. #region 基于2位十六进制格式的加密解密(不其他格式的加解密方法配合使用)
  63. /// <summary>
  64. /// 加密
  65. /// </summary>
  66. /// <param name="plaintext">明文</param>
  67. /// <param name="key"></param>
  68. /// <returns></returns>
  69. public static string DESEncrypt(string plaintext, string key)
  70. {
  71. DESCryptoServiceProvider des = InitDESInstance(key);
  72. StringBuilder sb = new StringBuilder();
  73. byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext);
  74. string ciphertext = "";
  75. using (MemoryStream ms = new MemoryStream())
  76. using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
  77. {
  78. cs.Write(dataByteArray, , dataByteArray.Length);
  79. cs.FlushFinalBlock();
  80. //输出加密文本
  81. foreach (byte b in ms.ToArray())
  82. {
  83. sb.AppendFormat("{0:X2}", b);
  84. }
  85. ciphertext = sb.ToString();
  86. }
  87. return ciphertext;
  88.  
  89. }
  90.  
  91. /// <summary>
  92. /// 解密
  93. /// </summary>
  94. /// <param name="ciphertext">密文</param>
  95. /// <param name="key"></param>
  96. /// <returns></returns>
  97. public static string DESDecrypt(string ciphertext, string key)
  98. {
  99. DESCryptoServiceProvider des = InitDESInstance(key);
  100. byte[] dataByteArray = new byte[ciphertext.Length / ];
  101. for (int x = ; x < ciphertext.Length / ; x++)
  102. {
  103. int i = (Convert.ToInt32(ciphertext.Substring(x * , ), ));
  104. dataByteArray[x] = (byte)i;
  105. }
  106. using (MemoryStream ms = new MemoryStream())
  107. using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
  108. {
  109. cs.Write(dataByteArray, , dataByteArray.Length);
  110. cs.FlushFinalBlock();
  111. return Encoding.UTF8.GetString(ms.ToArray());
  112. }
  113. }
  114. #endregion
  115.  
  116. #region 文件加密解密(不其他格式的加解密方法配合使用)
  117. /// <summary>
  118. /// 加密文件
  119. /// </summary>
  120. /// <param name="sourceFile">文件的物理路径</param>
  121. /// <param name="encryptFile">文件的物理路径</param>
  122. /// <param name="key"></param>
  123. public static void DESEncryptFile(string sourceFile, string encryptFile, string key)
  124. {
  125. if (string.IsNullOrEmpty(sourceFile) || string.IsNullOrEmpty(encryptFile)||!File.Exists(sourceFile)) return;
  126.  
  127. DESCryptoServiceProvider des = InitDESInstance(key);
  128.  
  129. using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
  130. using (FileStream encryptStream = new FileStream(encryptFile, FileMode.Create, FileAccess.Write))
  131. {
  132. byte[] dataByteArray = new byte[sourceStream.Length];
  133. sourceStream.Read(dataByteArray, , dataByteArray.Length);
  134. using (CryptoStream cs = new CryptoStream(encryptStream, des.CreateEncryptor(), CryptoStreamMode.Write))
  135. {
  136. cs.Write(dataByteArray, , dataByteArray.Length);
  137. cs.FlushFinalBlock();
  138. }
  139. }
  140. }
  141.  
  142. /// <summary>
  143. /// 解密文件
  144. /// </summary>
  145. /// <param name="encryptFile">文件的物理路径</param>
  146. /// <param name="decryptFile">文件的物理路径</param>
  147. /// <param name="key"></param>
  148. public static void DESDecryptFile(string encryptFile, string decryptFile, string key)
  149. {
  150. if (string.IsNullOrEmpty(encryptFile) || string.IsNullOrEmpty(decryptFile) || !File.Exists(encryptFile))return;
  151.  
  152. DESCryptoServiceProvider des = InitDESInstance(key);
  153.  
  154. using (FileStream encryptStream = new FileStream(encryptFile, FileMode.Open, FileAccess.Read))
  155. using (FileStream decryptStream = new FileStream(decryptFile, FileMode.Create, FileAccess.Write))
  156. {
  157. byte[] dataByteArray = new byte[encryptStream.Length];
  158. encryptStream.Read(dataByteArray, , dataByteArray.Length);
  159. using (CryptoStream cs = new CryptoStream(decryptStream, des.CreateDecryptor(), CryptoStreamMode.Write))
  160. {
  161. cs.Write(dataByteArray, , dataByteArray.Length);
  162. cs.FlushFinalBlock();
  163. }
  164. }
  165. }
  166.  
  167. /// <summary>
  168. /// 加密文本并输出到文件
  169. /// </summary>
  170. /// <param name="plaintext"></param>
  171. /// <param name="FileName">文件的物理路径</param>
  172. /// <param name="Key"></param>
  173. public static void DESEncryptTextToFile(string plaintext, string FileName, string key)
  174. {
  175. if (string.IsNullOrEmpty(FileName)) return;
  176.  
  177. DESCryptoServiceProvider des = InitDESInstance(key);
  178. byte[] dataByteArray = Encoding.UTF8.GetBytes(plaintext);
  179.  
  180. using (FileStream fStream = File.Open(FileName, FileMode.Create))
  181. using (CryptoStream cStream = new CryptoStream(fStream, des.CreateEncryptor(), CryptoStreamMode.Write))
  182. {
  183. cStream.Write(dataByteArray, , dataByteArray.Length);
  184. cStream.FlushFinalBlock();
  185. }
  186. }
  187.  
  188. /// <summary>
  189. /// 解密文件中的密文并返回
  190. /// </summary>
  191. /// <param name="FileName"></param>
  192. /// <param name="Key"></param>
  193. /// <returns></returns>
  194. public static string DESDecryptTextFromFile(string FileName, string key)
  195. {
  196. if (string.IsNullOrEmpty(FileName)||!File.Exists(FileName)) return "";
  197.  
  198. DESCryptoServiceProvider des = InitDESInstance(key);
  199.  
  200. using (FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate))
  201. using (CryptoStream cStream = new CryptoStream(fStream, des.CreateDecryptor(), CryptoStreamMode.Read))
  202. using (StreamReader sReader = new StreamReader(cStream))
  203. {
  204. string val = sReader.ReadToEnd();
  205. return val;
  206. }
  207. }
  208. #endregion
  209. }

Tips:参考MSDN整理编写,比较全面。

DES加密解密帮助类的更多相关文章

  1. des 加密解密工具类

    最近在做des的双对称加密解密,特此记录一下. des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码 ...

  2. MD5&&DES加密解密帮助类

    public class _MD5_NETCore加密解密 { /// <summary> /// 加密 /// </summary> /// <param name=& ...

  3. C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类

    public class RegisterHelp { /// <summary> /// CPU /// </summary> /// <returns>< ...

  4. 【DES加密解密】 C#&JAVA通用

    DES加密解密 C# Code /// <summary> /// DES加密解密帮助类 /// </summary> public static class DESHelpe ...

  5. 一个java的DES加密解密类转换成C#

    一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...

  6. DES加密解密

    加密后生成Base64字符串,并去除'='字符. 加密后替换掉'+',这样加密后的字符串可以作为url参数传递. using System; using System.IO; using System ...

  7. C# MD5加密解密帮助类

    /// <summary>    /// MD5加密解密帮助类    /// </summary>    public static class DESHelper    {  ...

  8. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...

  9. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

随机推荐

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  2. javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理

    案例: var scoresTable=[ {id:11,name:"小张",score:80}, {id:22,name:"小王",score:95}, {i ...

  3. uva 11354 - Bond(树链拆分)

    题目链接:uva 11354 - Bond 题目大意:给定一张图.每次询问两个节点路径上进过边的危急值的最大值的最小值. 解题思路:首先建立最小生成数,然后依据这棵树做树链剖分. #include & ...

  4. 内置在虚拟机上64位操作系统:该主机支持 Intel VT-x,但 Intel VT-x 残

    VT-Virtual Technology. 在这里特别说一下:虚拟64位操作系统,须要特别在BIOS中打开VT支持.怎样提示:此主机不支持Intel VT-x,则不可能虚拟出64位系统. 当提示:此 ...

  5. 浅谈 js 字符串之神奇的转义

    原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...

  6. 【高德地图API】如何制作自己的旅游地图?

    原文:[高德地图API]如何制作自己的旅游地图? “旅行的梦想并不遥远,只要一颗流浪四方的心.”——唐人立. 最早认识唐人立的时候,他还是大二的学生.他独自完成了“南京20年规划地图”.几年前,他完成 ...

  7. 【百度地图API】关于如何进行城市切换的三种方式

    原文:[百度地图API]关于如何进行城市切换的三种方式 摘要:本文介绍了三种切换城市的方式:查询城市.城市列表和显示城市轮廓. ------------------------------------ ...

  8. sql server 辅助工具

    sql Prompt 智能感知, 也是需要注册机. 效果如图: 这里最好改下:

  9. What is HHVM?

    What is HHVM? HHVM is an open-source virtual machine designed for executing programs written in Hack ...

  10. openstack shelve/unshelve/stop浅析

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! stop的虚拟机仅仅是将虚拟 ...