1. using System;
  2.  
  3. using System.IO;
  4. using System.Security.Cryptography;
  5. using System.Text;
  6.  
  7. namespace Common
  8. {
  9. /// <summary>
  10. /// 采用 3DES 加解密方式。
  11. /// </summary>
  12. public class EncryptAndDecrypte
  13. {
  14. static string strKey = "fdbc4y6hdhKlf4M3mjgGrMC3PbryXrxw";
  15. static string strIV = "RfnMfrpec48=";
  16. /// <summary>
  17. /// 默认加密字符串。
  18. /// </summary>
  19. /// <param name="ConnString"></param>
  20. /// <returns></returns>
  21. public static string EncryptString(string encryptString)
  22. {
  23. if (string.IsNullOrWhiteSpace(encryptString)) return encryptString;
  24.  
  25. return Convert.ToBase64String(EncryptAndDecrypte.EncryptString(
  26. encryptString,
  27. Convert.FromBase64String(strKey),
  28. Convert.FromBase64String(strIV)
  29. )
  30. );
  31. }
  32.  
  33. /// <summary>
  34. /// 默认解密字符串
  35. /// </summary>
  36. /// <param name="EncryptedConnectionString"></param>
  37. /// <returns></returns>
  38. public static string DecrypteString(string EncryptedConnectionString)
  39. {
  40. if (string.IsNullOrWhiteSpace(EncryptedConnectionString)) return EncryptedConnectionString;
  41.  
  42. return EncryptAndDecrypte.DecrypteString(
  43. Convert.FromBase64String(EncryptedConnectionString),
  44. Convert.FromBase64String(strKey),
  45. Convert.FromBase64String(strIV)
  46. ).TrimEnd('\0');
  47. }
  48. /// <summary>
  49. /// 使用指定的 Key 和 IV 加密 。
  50. /// </summary>
  51. /// <param name="ToEncryptString"></param>
  52. /// <param name="byKey"></param>
  53. /// <param name="byIV"></param>
  54. /// <returns></returns>
  55. private static byte[] EncryptString(string ToEncryptString, byte[] byKey, byte[] byIV)
  56. {
  57. if (string.IsNullOrWhiteSpace(ToEncryptString)) return null;
  58.  
  59. MemoryStream memStm = new MemoryStream();
  60. TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
  61.  
  62. CryptoStream encStream = null;
  63. encStream = new CryptoStream(
  64. memStm, tdes.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write
  65. );
  66.  
  67. byte[] byIn = Encoding.Default.GetBytes(ToEncryptString);
  68. encStream.Write(byIn, , byIn.Length);
  69. encStream.FlushFinalBlock();
  70. encStream.Close();
  71. return memStm.ToArray();
  72. }
  73.  
  74. /// <summary>
  75. /// 使用指定的 Key 和 IV 解密。
  76. /// </summary>
  77. /// <param name="byIn"></param>
  78. /// <param name="byKey"></param>
  79. /// <param name="byIV"></param>
  80. /// <returns></returns>
  81. private static string DecrypteString(byte[] byIn, byte[] byKey, byte[] byIV)
  82. {
  83. if (byIn == null || byIn.Length == ) return string.Empty;
  84.  
  85. MemoryStream memStm = new MemoryStream(byIn);
  86. TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
  87.  
  88. CryptoStream encStream = new CryptoStream(
  89. memStm, tdes.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read
  90. );
  91.  
  92. byte[] fromEncrypt = new byte[byIn.Length];
  93. encStream.Read(fromEncrypt, , fromEncrypt.Length);
  94. encStream.Close();
  95.  
  96. string strRet = Encoding.Default.GetString(fromEncrypt);
  97. return strRet;
  98. }
  99.  
  100. /// <summary>
  101. /// 获取随机(种子是 GUID 的 Byte 的和)长度的Byte数组.
  102. /// </summary>
  103. /// <param name="Len">要得到的数组的长度</param>
  104. /// <returns></returns>
  105. private static byte[] GetBytes(int Len)
  106. {
  107. int Seed = ;
  108. byte[] bySeed = Guid.NewGuid().ToByteArray();
  109.  
  110. foreach (byte byt in bySeed)
  111. {
  112. Seed += byt;
  113. }
  114.  
  115. byte[] byKey = new byte[Len];
  116. new Random(Seed).NextBytes(byKey);
  117. return byKey;
  118. }
  119.  
  120. /// <summary>
  121. /// 获取 Key 和 IV , 如果失败,返回null。
  122. /// </summary>
  123. /// <param name="Key"></param>
  124. /// <param name="IV"></param>
  125. public static void TryGetKeyAndIV(out byte[] Key, out byte[] IV)
  126. {
  127. TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
  128.  
  129. for (int i = ; i > ; i--)
  130. {
  131. try
  132. {
  133. Key = GetBytes(i);
  134. IV = GetBytes(i);
  135. tdes.CreateDecryptor(Key, IV);
  136. return;
  137. }
  138. catch
  139. {
  140. }
  141. }
  142. Key = null;
  143. IV = null;
  144. return;
  145. }
  146. }
  147. }

3DES 加解密的更多相关文章

  1. PHP版3DES加解密类

    <?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...

  2. 3DES加解密【示例】

    代码 /**  * 3DES加解密  */ public class DESedeUtils {     private static final String ALGORITHM_MD5 = &qu ...

  3. 3DES加解密 C语言

    3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...

  4. java 与 c# 3des 加解密

    java 与 c# 3des 加解密   主要差异如下: 1.  对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...

  5. 3DES加解密类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...

  6. PHP和.NET通用的加密解密函数类,均使用3DES加解密 .

    以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...

  7. 3des加解密算法

    编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...

  8. 3DES 加解密,对长度不限制

    #region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...

  9. 3Des加解密 C#--->Java

    Java的Byte范围为-128至127,c#的Byte范围是0-255.核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章. C#采用CBC Mode,PKCS7 Pa ...

随机推荐

  1. 夺命雷公狗---node.js---14之DNS

    node下如果想域名解析是需要通过apache或者ng的反向版定才可以实现的,但是他也给我们留下了哟套DNS操作方法: /** * Created by leigood on 2016/8/30. * ...

  2. linux中查看硬件温度的命令

    用到的命令是: sensors 这个命令来自一个叫 lm_sensors 的包. 执行 sensors-detect 可以以询问的方式做一些配置(可以选择检测哪些硬件的温度).

  3. 开启xp_cmdshell

    --打开xp_cmdshell EXEC sp_configure 'show advanced options', 1GORECONFIGUREGOEXEC sp_configure 'xp_cmd ...

  4. php 获取mac地址

    <?php  /**   * 获取机器网卡的物理(MAC)地址* 目前支持WIN/LINUX系统   * 编辑: www.jbxue.com**/  class MacAddInfo {     ...

  5. DB2 Unload 的时候遇到B37-04

    B37-04的问题是每个Mainframer首先会遇到的问题,在Unload的时候最大的可能性是Extend次数到16次了,这时候只要加大primary或secondary就可以了,我最常用的是pri ...

  6. phabricator

    (1)安装./bitnami-phabricator-20160523-0-linux-x64-installer.run (2)中文phabricator-zh_CN.tar解压缩到/opt/pha ...

  7. 前端js,css文件合并三种方式,bat命令

    前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...

  8. [转]linux主机644、755、777权限详解

    转自:http://my.oschina.net/qihh/blog/73135 从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 从左至右,第一 ...

  9. oracle 日期问题

    共三部分: 第一部分:oracle sql日期比较: http://www.cnblogs.com/sopost/archive/2011/12/03/2275078.html 第二部分:Oracle ...

  10. iOS完整App资源收集

    前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...