3DES 加解密
- using System;
- using System.IO;
- using System.Security.Cryptography;
- using System.Text;
- namespace Common
- {
- /// <summary>
- /// 采用 3DES 加解密方式。
- /// </summary>
- public class EncryptAndDecrypte
- {
- static string strKey = "fdbc4y6hdhKlf4M3mjgGrMC3PbryXrxw";
- static string strIV = "RfnMfrpec48=";
- /// <summary>
- /// 默认加密字符串。
- /// </summary>
- /// <param name="ConnString"></param>
- /// <returns></returns>
- public static string EncryptString(string encryptString)
- {
- if (string.IsNullOrWhiteSpace(encryptString)) return encryptString;
- return Convert.ToBase64String(EncryptAndDecrypte.EncryptString(
- encryptString,
- Convert.FromBase64String(strKey),
- Convert.FromBase64String(strIV)
- )
- );
- }
- /// <summary>
- /// 默认解密字符串
- /// </summary>
- /// <param name="EncryptedConnectionString"></param>
- /// <returns></returns>
- public static string DecrypteString(string EncryptedConnectionString)
- {
- if (string.IsNullOrWhiteSpace(EncryptedConnectionString)) return EncryptedConnectionString;
- return EncryptAndDecrypte.DecrypteString(
- Convert.FromBase64String(EncryptedConnectionString),
- Convert.FromBase64String(strKey),
- Convert.FromBase64String(strIV)
- ).TrimEnd('\0');
- }
- /// <summary>
- /// 使用指定的 Key 和 IV 加密 。
- /// </summary>
- /// <param name="ToEncryptString"></param>
- /// <param name="byKey"></param>
- /// <param name="byIV"></param>
- /// <returns></returns>
- private static byte[] EncryptString(string ToEncryptString, byte[] byKey, byte[] byIV)
- {
- if (string.IsNullOrWhiteSpace(ToEncryptString)) return null;
- MemoryStream memStm = new MemoryStream();
- TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
- CryptoStream encStream = null;
- encStream = new CryptoStream(
- memStm, tdes.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write
- );
- byte[] byIn = Encoding.Default.GetBytes(ToEncryptString);
- encStream.Write(byIn, , byIn.Length);
- encStream.FlushFinalBlock();
- encStream.Close();
- return memStm.ToArray();
- }
- /// <summary>
- /// 使用指定的 Key 和 IV 解密。
- /// </summary>
- /// <param name="byIn"></param>
- /// <param name="byKey"></param>
- /// <param name="byIV"></param>
- /// <returns></returns>
- private static string DecrypteString(byte[] byIn, byte[] byKey, byte[] byIV)
- {
- if (byIn == null || byIn.Length == ) return string.Empty;
- MemoryStream memStm = new MemoryStream(byIn);
- TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
- CryptoStream encStream = new CryptoStream(
- memStm, tdes.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read
- );
- byte[] fromEncrypt = new byte[byIn.Length];
- encStream.Read(fromEncrypt, , fromEncrypt.Length);
- encStream.Close();
- string strRet = Encoding.Default.GetString(fromEncrypt);
- return strRet;
- }
- /// <summary>
- /// 获取随机(种子是 GUID 的 Byte 的和)长度的Byte数组.
- /// </summary>
- /// <param name="Len">要得到的数组的长度</param>
- /// <returns></returns>
- private static byte[] GetBytes(int Len)
- {
- int Seed = ;
- byte[] bySeed = Guid.NewGuid().ToByteArray();
- foreach (byte byt in bySeed)
- {
- Seed += byt;
- }
- byte[] byKey = new byte[Len];
- new Random(Seed).NextBytes(byKey);
- return byKey;
- }
- /// <summary>
- /// 获取 Key 和 IV , 如果失败,返回null。
- /// </summary>
- /// <param name="Key"></param>
- /// <param name="IV"></param>
- public static void TryGetKeyAndIV(out byte[] Key, out byte[] IV)
- {
- TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
- for (int i = ; i > ; i--)
- {
- try
- {
- Key = GetBytes(i);
- IV = GetBytes(i);
- tdes.CreateDecryptor(Key, IV);
- return;
- }
- catch
- {
- }
- }
- Key = null;
- IV = null;
- return;
- }
- }
- }
3DES 加解密的更多相关文章
- PHP版3DES加解密类
<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...
- 3DES加解密【示例】
代码 /** * 3DES加解密 */ public class DESedeUtils { private static final String ALGORITHM_MD5 = &qu ...
- 3DES加解密 C语言
3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...
- java 与 c# 3des 加解密
java 与 c# 3des 加解密 主要差异如下: 1. 对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...
- 3DES加解密类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...
- PHP和.NET通用的加密解密函数类,均使用3DES加解密 .
以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...
- 3des加解密算法
编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...
- 3DES 加解密,对长度不限制
#region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...
- 3Des加解密 C#--->Java
Java的Byte范围为-128至127,c#的Byte范围是0-255.核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章. C#采用CBC Mode,PKCS7 Pa ...
随机推荐
- 夺命雷公狗---node.js---14之DNS
node下如果想域名解析是需要通过apache或者ng的反向版定才可以实现的,但是他也给我们留下了哟套DNS操作方法: /** * Created by leigood on 2016/8/30. * ...
- linux中查看硬件温度的命令
用到的命令是: sensors 这个命令来自一个叫 lm_sensors 的包. 执行 sensors-detect 可以以询问的方式做一些配置(可以选择检测哪些硬件的温度).
- 开启xp_cmdshell
--打开xp_cmdshell EXEC sp_configure 'show advanced options', 1GORECONFIGUREGOEXEC sp_configure 'xp_cmd ...
- php 获取mac地址
<?php /** * 获取机器网卡的物理(MAC)地址* 目前支持WIN/LINUX系统 * 编辑: www.jbxue.com**/ class MacAddInfo { ...
- DB2 Unload 的时候遇到B37-04
B37-04的问题是每个Mainframer首先会遇到的问题,在Unload的时候最大的可能性是Extend次数到16次了,这时候只要加大primary或secondary就可以了,我最常用的是pri ...
- phabricator
(1)安装./bitnami-phabricator-20160523-0-linux-x64-installer.run (2)中文phabricator-zh_CN.tar解压缩到/opt/pha ...
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
- [转]linux主机644、755、777权限详解
转自:http://my.oschina.net/qihh/blog/73135 从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 从左至右,第一 ...
- oracle 日期问题
共三部分: 第一部分:oracle sql日期比较: http://www.cnblogs.com/sopost/archive/2011/12/03/2275078.html 第二部分:Oracle ...
- iOS完整App资源收集
前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...