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 ...
随机推荐
- linux更新系统之后,删除多余的开机启动项
实验环境是centos7,采用uefi的引导方式,启动管理软件是grub2 1. 进入 /boot 目录,应该可以发现许多文件的文件名是以 vmlinuz 开头,后面跟着版本信息,这些就是内核.我们要 ...
- yii2购物车实现
1.商品列表中点击加入购物车,则跳转到购物车列表,效果如图所示: 视图代码goods/list.php中.代码如下: <?php echo Html::a('加入购物车',['cart','id ...
- location.reload()加载时有弹出框
解决办法: 1.试试 window.location.href=window.location.href 2.当前页有被post数据的时候reload就会提示刷新 可以尝试重新定向页面地址 3.rel ...
- SQL分组取每组前一(或几)条记录(排名)
mysql分组取每组前几条记录(排名) 附group by与order by的研究 http://www.jb51.net/article/31590.htm --按某一字段分组取最大(小)值所在行的 ...
- wc移植sae笔记
1.wc移植到sae---上传图片 ①先看profile.ptl.html中的ajax代码修改functions.js中G_BASE_URL的值.在这里我先写死成->'http://2.idan ...
- OpenStack 之vmware机器迁移到openstack集群
原理 openstack本身是支持使用vmware格式的镜像的,但是是需要我们我们在/etc/nova/nova.conf的配置文件中指定该计算节点使用vmware的驱动 1 2 3 4 5 6 7 ...
- HorizontalScrollView的配置
package com.exmple.jinritoutiao; import java.util.ArrayList;import java.util.Calendar;import java.ut ...
- android——单点触控移动,多点触控放大缩小
xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- tomcat缓存静态资源深入
之前看过apach及nginx对于静态资源(含js,图片,css等)部分的缓存,用于加速并减轻后台实际web服务器的压力. 静态资源缓存是WEB服务器优化的一种手段,基本原理如下: 1.客户端浏览器请 ...
- Spring事务注解@Transactional回滚问题
Spring配置文件,声明事务时,如果rollback-for属性没有指定异常或者默认不写:经测试事务只回滚运行时异常(RuntimeException)和错误(Error). <!-- 配置事 ...