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 ...
随机推荐
- 【转】使用Cocoapods创建私有podspec
Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...
- [LeetCode] Longest Increasing Subsequence
Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest incre ...
- ambari初始化登陆账号/密码假如不是admin/admin
如题:通常软件初始化密码都是admin: 但是hortonworks就突然傻逼了,居然不这样搞.(可能知道一些开发者不看官网文档,就特意弄成这样.正如我) 我上网搜了5分钟.感觉网上应该没有这样的资料 ...
- CentOS 6.5 EasyPR环境搭建
EasyPR是一款开源的中文车牌识别系统,项目地址. 在搭建的过程中,主要的问题是注意版本的兼容性,这里面的版本包括:opencv版本,g++版本以及cmake版本. 我使用的EasyPr版本信息如下 ...
- Windows 2012 安装 .net framework 3.5
使用 PowerShell, 指定源文件路径然后进行安装: Install-WindowsFeature NET-Framework-Core –Source D:\Sources\sxs 使用命令提 ...
- 无须任何软件配置iis+ftp服务器图文说明
1.1 检查是否安装已安装IIS6组件 在windows service 2003 操作系统中,windows组件“IIS6.0”是用户搭建站点以及ftp文件共享的服务器. 具体检查步骤如下: 进入“ ...
- SQL SERVER2012中使用游标来备份数据库
在SQL SERVER中,添加JOB,可以使用以下语句设置定期备份数据库. DECLARE @name VARCHAR(50)--databasename DECLARE @path VARCHAR( ...
- VC++ 学习笔记(序):神一样的语言
总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ...
- C#记录对象的变化
经常,我们会遇到一个场景,在保存对象到数据库之前,对比内存对象和数据库值的差异. 下面我写了一种实现,为保存定义一个事件,然后自动找出对象之间的差异,请注意,并没有通过反射的方式去获取每个属性及其值. ...
- Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
本地原来已经安装了JAVA JDK1.7并配置好了环境变量; 然后又安装了JDK8,想2个版本并存. 然后发现eclipse 打不开,闪退.然后查看环境: 发现 C:\Users\Administra ...