C#加密类
var es= EncryptSugar.GetInstance();
string word = "abc";
var wordEncrypt = es.Encrypto(word);//加密
var wordDecrypt = es.Decrypto(wordEncrypt);//解密
var wordMd5 = es.MD5(word);//md5加密
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.Xml;
using System.IO;
using System.Linq;
namespace SyntacticSugar
{
/// <summary>
/// ** 描述:加密类
/// ** 创始时间:2015-6-30
/// ** 修改时间:-
/// ** 作者:sunkaixuan
/// ** 使用说明:http://www.cnblogs.com/sunkaixuan/p/4610729.html
/// </summary>
public class EncryptSugar
{
private static readonly object _instanceLock = new object();
private static EncryptSugar _instance = null;
private static SymmetricAlgorithm mobjCryptoService;
private static string _key;
private static readonly object _cacheLock = new object();
private static Dictionary<string, string> _cache = new Dictionary<string, string>();
/// <summary>
/// 最大缓存条数
/// </summary>
private static int _maxCacheNum = 10000; /// <summary>
/// 对称加密类的构造函数
/// </summary>
public static EncryptSugar GetInstance()
{
if (_instance == null)
{
lock (_instanceLock)
{
if (_instance == null)
{
mobjCryptoService = new RijndaelManaged();
_key = "Guz(%&as1213^^d(fa%(HilJ$lhj!y6&(*jkP87jH7";
_instance = new EncryptSugar();
}
}
}
return _instance;
} /// <summary>
/// 加密方法
/// </summary>
/// <param name="Source">待加密的串</param>
/// <returns>经过加密的串</returns>
public string Encrypto(string source)
{
if (_cache.ContainsKey(source))
{
return _cache[source];
} byte[] bytIn = UTF8Encoding.UTF8.GetBytes(source); MemoryStream ms = new MemoryStream(); mobjCryptoService.Key = GetLegalKey(); mobjCryptoService.IV = GetLegalIV(); ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); cs.Write(bytIn, 0, bytIn.Length); cs.FlushFinalBlock(); ms.Close(); byte[] bytOut = ms.ToArray();
string reval = Convert.ToBase64String(bytOut);
lock (_cacheLock)
{
if (_cache.Count > _maxCacheNum)
{
foreach (var it in _cache.Take(_maxCacheNum/5))
{ _cache.Remove(it.Key); }
}
_cache.Add(source, reval);
}
return reval; ; } /// <summary>
/// 解密方法
/// </summary>
/// <param name="Source">待解密的串</param>
/// <returns>经过解密的串</returns>
public string Decrypto(string source)
{
lock (_cacheLock)
{
if (_cache.Any(it => it.Value == source))
{
return _cache.Single(it => it.Value == source).Key;
}
} byte[] bytIn = Convert.FromBase64String(source); MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); mobjCryptoService.Key = GetLegalKey(); mobjCryptoService.IV = GetLegalIV(); ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); StreamReader sr = new StreamReader(cs); return sr.ReadToEnd(); } /// <summary>
/// MD5加密,不可逆
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public string MD5(string source)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");
} #region 私有函数
/// <summary>
/// 获得密钥
/// </summary>
/// <returns>密钥</returns>
private byte[] GetLegalKey()
{ string sTemp = _key; mobjCryptoService.GenerateKey(); byte[] bytTemp = mobjCryptoService.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV</returns>
private byte[] GetLegalIV()
{ string sTemp = "asdfas&&dfg*$#+)*Y41sdgsdgs&*%$$$^&&GGslsadKdfK1"; mobjCryptoService.GenerateIV(); byte[] bytTemp = mobjCryptoService.IV; int IVLength = bytTemp.Length; if (sTemp.Length > IVLength) sTemp = sTemp.Substring(0, IVLength); else if (sTemp.Length < IVLength) sTemp = sTemp.PadRight(IVLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); }
#endregion
} }
C#加密类的更多相关文章
- php加密类
1.需求 了解php加密类的使用 2.例子 参考ci的3.1.2的新版加密类,一个不传参,用默认加密算法,加密模式的例子 //0.加载加密类 $this->load->library('e ...
- PHP的AES加密类
PHP的AES加密类 aes.php <?php /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- C# DES加密类,16位的加密。
这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题. 可以直接调用里面的加密和解密的方法. using System; using System. ...
- php实现aes加密类
php实现的aes加密类,代码中有使用方法. <?php //php aes加密类 class AESMcrypt { public $iv = null; public $key = null ...
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...
- C#简单的加密类
1.加密 public class EncryptHepler { // 验值 static string saltValue = "XXXX"; // 密码值 static st ...
- Java常用的加密解密类(对称加密类)
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...
- JAVA中简单的MD5加密类(MD5Utils)
MD5加密分析: JDK API: 获取对象的API: 加密的API: package cn.utils; import java.security.MessageDigest; im ...
- C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
随机推荐
- 如何向Openstack社区提交一个新项目
前几天有个朋友问我:自己有一个idea不错的项目,也把基本的框架写好了,想贡献到Openstack社区,却不知道应该怎么做.正好之前我有过类似的经历,那么来分享一下我是如何向Openstack社区提交 ...
- 【转】Android布局优化之ViewStub
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- Android开发的技术层次
任何一种移动开发生态系统其技术人员都是呈现金字塔式分布的.我借此也说说Developer和Programmer的区别: Programmer是真正意义上的程序员,写程序的.灵魂级 Developer是 ...
- 《STL系列》之vector原理及实现
最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...
- 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果
(国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果 相信这么多手机APP中 ...
- Android开发(三十二)——延时
模拟延时 private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected S ...
- ab 测试模块高并发
转载:http://gekie.iteye.com/blog/1704235 作为程序员,写好一个模块后,不知道这个模块在高并发的情况下能不能平稳过渡,这里所说的平稳过渡是指,在高并发的情况下还能正常 ...
- centos7 Linux 尝试使用crontab
一.安装crontab [root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yum install crontabs 说明:vixie-cr ...
- zendStudio 10.5破解
1.下载zendStudio 10.5(mac系统) windows系统安装文件 并安装. 2.下载破解文件,并覆盖安装目录plugins同名文件,要注意版本. 3.启动程序,输入注册码: 3 ...
- The model backing the <Database> context has changed since the database was created.
Just found out the answer and thought of updating here. Just need to do the following. public class ...