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 ...
随机推荐
- 夺命雷公狗—angularjs—6—单条数据的遍历
我们在实际的工作中常常会处理到一些数据的遍历,这些数据都是后端传到前端的,有些公司会让前端帮忙处理一点遍历的工作,废话不多说,直接上代: <!doctype html> <html ...
- 四则运算GUI版本功能展现
对于四则运算的GUI版本实现支持批量出题,由于我的不积极导致教师没找到对应的连接,现在重新补上链接 http://www.cnblogs.com/liquan/p/5978687.html codin ...
- [Ubuntu] Error: The disk drive for /media/sda2 is not ready yet or not present
After updated Ubuntu, and reboot, I got these error The disk drive for /media/sda2 is not ready yet ...
- 有关git的换行符的处理问题
签入签出时对换行符的操作: #签出时将LF转换为CRLF,签入时将CRLF转换为LF git config --global core.autocrlf true #签出时不转换,签入时转换为LF g ...
- PHP人民币金额数字转中文大写的函数
<?php header("Content-Type:text/html;charset=utf-8"); error_reporting(2); function cny( ...
- c++实现mlp神经网络
之前一直用theano训练样本,最近需要转成c或c++实现.在网上参考了一下其它代码,还是喜欢c++.但是看了几份cpp代码之后,发现都多少有些bug,很不爽.由于本人编码能力较弱,还花了不少时间改正 ...
- 如何清除DNS缓存,使用cmd命令清理DNS缓存方法
如何清除DNS缓存,使用cmd命令清理DNS缓存方法 有时候电脑突然上不了网,或者存在某些网站打不开的情况,但别的网站又可以打开,解决办法需要清除DNS缓存,那么如何清除DNS缓存呢,最常用的方法就是 ...
- Web Token JWT
基于Token的WEB后台认证机制 JSON Web Token in ASP.NET Web API 2 using Owin 翻译:Token Authentication in ASP.NET ...
- android 系统相册调用,各版本的区别总结
请求系统相册有三个Action: (注意以下 图库(缩略图) 和 图片(原图) 的区别) ACTION_OPEN_DOCUMENT 仅限4.4或以上使用 默认打开原图 ACTION_ ...
- ACM题目————Aggressive cows
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...