C# 常用加密解密帮助类
public static class EncryptUtil { #region MD5加密 /// <summary> /// MD5加密 /// </summary> public static string Md532(this string value) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; MD5 md5 = MD5.Create(); return HashAlgorithmBase(md5, value, encoding); } /// <summary> /// 加权MD5加密 /// </summary> public static string Md532(this string value, string salt) { return salt == null ? value.Md532() : (value + "『" + salt + "』").Md532(); } #endregion #region SHA 加密 /// <summary> /// SHA1 加密 /// </summary> public static string Sha1(this string value) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; SHA1 sha1 = new SHA1CryptoServiceProvider(); return HashAlgorithmBase(sha1, value, encoding); } /// <summary> /// SHA256 加密 /// </summary> public static string Sha256(this string value) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; SHA256 sha256 = new SHA256Managed(); return HashAlgorithmBase(sha256, value, encoding); } /// <summary> /// SHA512 加密 /// </summary> public static string Sha512(this string value) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; SHA512 sha512 = new SHA512Managed(); return HashAlgorithmBase(sha512, value, encoding); } #endregion #region HMAC 加密 /// <summary> /// HmacSha1 加密 /// </summary> public static string HmacSha1(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA1 hmacSha1 = new HMACSHA1(keyStr); return HashAlgorithmBase(hmacSha1, value, encoding); } /// <summary> /// HmacSha256 加密 /// </summary> public static string HmacSha256(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA256 hmacSha256 = new HMACSHA256(keyStr); return HashAlgorithmBase(hmacSha256, value, encoding); } /// <summary> /// HmacSha384 加密 /// </summary> public static string HmacSha384(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA384 hmacSha384 = new HMACSHA384(keyStr); return HashAlgorithmBase(hmacSha384, value, encoding); } /// <summary> /// HmacSha512 加密 /// </summary> public static string HmacSha512(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA512 hmacSha512 = new HMACSHA512(keyStr); return HashAlgorithmBase(hmacSha512, value, encoding); } /// <summary> /// HmacMd5 加密 /// </summary> public static string HmacMd5(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACMD5 hmacMd5 = new HMACMD5(keyStr); return HashAlgorithmBase(hmacMd5, value, encoding); } /// <summary> /// HmacRipeMd160 加密 /// </summary> public static string HmacRipeMd160(this string value, string keyVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr); return HashAlgorithmBase(hmacRipeMd160, value, encoding); } #endregion #region AES 加密解密 /// <summary> /// AES加密 /// </summary> /// <param name="value">待加密字段</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static string AesStr(this string value, string keyVal, string ivVal) { if (value == null) { throw new ArgumentNullException("未将对象引用设置到对象的实例。"); } var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = encoding.GetBytes(value); string encrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, , byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } aes.Clear(); return encrypt; } /// <summary> /// AES解密 /// </summary> /// <param name="value">待加密字段</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static string UnAesStr(this string value, string keyVal, string ivVal) { var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = Convert.FromBase64String(value); string decrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, , byteArray.Length); cStream.FlushFinalBlock(); decrypt = encoding.GetString(mStream.ToArray()); } } aes.Clear(); return decrypt; } /// <summary> /// AES Byte类型 加密 /// </summary> /// <param name="data">待加密明文</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static byte[] AesByte(this byte[] data, string keyVal, string ivVal) { ]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); ]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] cryptograph; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write)) { cStream.Write(data, , data.Length); cStream.FlushFinalBlock(); cryptograph = mStream.ToArray(); } } } catch { cryptograph = null; } return cryptograph; } /// <summary> /// AES Byte类型 解密 /// </summary> /// <param name="data">待解密明文</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal) { ]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); ]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] original; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream(data)) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read)) { using (MemoryStream originalMemory = new MemoryStream()) { ]; int readBytes; , buffer.Length)) > ) { originalMemory.Write(buffer, , readBytes); } original = originalMemory.ToArray(); } } } } catch { original = null; } return original; } #endregion #region DES 加密解密 /// <summary> /// DES 加密 /// </summary> public static string Des(this string value, string keyVal, string ivVal) { try { byte[] data = Encoding.UTF8.GetBytes(value); ? keyVal.Substring(, ) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > ? ivVal.Substring(, ) : ivVal) }; var desencrypt = des.CreateEncryptor(); , data.Length); return BitConverter.ToString(result); } catch { return "转换出错!"; } } /// <summary> /// DES 解密 /// </summary> public static string UnDes(this string value, string keyVal, string ivVal) { try { string[] sInput = value.Split("-".ToCharArray()); byte[] data = new byte[sInput.Length]; ; i < sInput.Length; i++) { data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber); } ? keyVal.Substring(, ) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > ? ivVal.Substring(, ) : ivVal) }; var desencrypt = des.CreateDecryptor(); , data.Length); return Encoding.UTF8.GetString(result); } catch { return "解密出错!"; } } #endregion #region BASE64 加密解密 /// <summary> /// BASE64 加密 /// </summary> /// <param name="value">待加密字段</param> /// <returns></returns> public static string Base64(this string value) { var btArray = Encoding.UTF8.GetBytes(value); , btArray.Length); } /// <summary> /// BASE64 解密 /// </summary> /// <param name="value">待解密字段</param> /// <returns></returns> public static string UnBase64(this string value) { var btArray = Convert.FromBase64String(value); return Encoding.UTF8.GetString(btArray); } #endregion #region Base64加密解密 /// <summary> /// Base64加密 可逆 /// </summary> /// <param name="value">待加密文本</param> /// <returns></returns> public static string Base64Encrypt(string value) { return Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(value)); } /// <summary> /// Base64解密 /// </summary> /// <param name="ciphervalue">密文</param> /// <returns></returns> public static string Base64Decrypt(string ciphervalue) { return System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(ciphervalue)); } #endregion #region 内部方法 /// <summary> /// 转成数组 /// </summary> private static byte[] Str2Bytes(this string source) { source = source.Replace(" ", ""); ]; ; i < source.Length; i += ) buffer[i / ] = Convert.ToByte(source.Substring(i, ), ); return buffer; } /// <summary> /// 转换成字符串 /// </summary> private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}") { StringBuilder pwd = new StringBuilder(); foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); } return pwd.ToString(); } private static byte[] FormatByte(this string strVal, Encoding encoding) { , ).ToUpper()); } /// <summary> /// HashAlgorithm 加密统一方法 /// </summary> private static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding) { byte[] btStr = encoding.GetBytes(source); byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr); return hashStr.Bytes2Str(); } #endregion }
C# 常用加密解密帮助类的更多相关文章
- ASP.NET常用加密解密方法
ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码 public static string ToMd5(string clearString) ...
- 2019-2-20C#开发中常用加密解密方法解析
C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...
- AES加密解密 助手类 CBC加密模式
"; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...
- php加密解密功能类
这两天突发奇想想要用php写一个对日常项目加密以及解密的功能,经过努力简单的封装了一个对php代码进行加密解密的类,一些思想也是来自于网络,初步测试用着还行,可以实现对指定项目的加密以及解密(只针对本 ...
- C# MD5加密解密帮助类
/// <summary> /// MD5加密解密帮助类 /// </summary> public static class DESHelper { ...
- php加密解密处理类
[PHP]代码 <?php /*=========================================================== = 版权协议: = GPL (The GN ...
- .Net(c#)加密解密工具类:
/// <summary> /// .Net加密解密帮助类 /// </summary> public class NetCryptoHelper { #region des实 ...
- Base64加密解密工具类
使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...
- php实现的三个常用加密解密功能函数示例
目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...
随机推荐
- Some warning were found during validation
前几天做一个iOS下的App更新,到上传的时候出了问题,一直传了大半个小时,结果还是没传完,再试依然不行,于是只好关机,把电脑带回家弄. 回家后出现了更奇怪的事,经过漫长等待后,竟然出现这个提示: 我 ...
- EasyPR--开发详解(2)车牌定位
这篇文章是一个系列中的第三篇.前两篇的地址贴下:介绍.详解1.我撰写这系列文章的目的是:1.普及车牌识别中相关的技术与知识点:2.帮助开发者了解EasyPR的实现细节:3.增进沟通. EasyPR的项 ...
- 程序猿尤其是.NET程序员所需要注意的网站资源
我觉得一个程序员 需要 对 技术 和 行业 两方面同时具有极大热情和注意力才能让自己在一个新的台阶. 有些程序员就是对技术有着极大的热情但是行业完全不注意,这样我感觉只能成为一个专家,并不能让自己真正 ...
- 分享自己写的JS版日期格式化和解析工具类,绝对好用!
前言 本来想模仿Java里面的SimpleDateFormat()对象的,但是感觉这样用起来不方便,所以还是直接写成单独的方法算了. 原文链接 日期格式化 使用说明 formatDate(date, ...
- ASP.NET MVC Routing学习笔记(一)
Routing在ASP.NET MVC中是非常核心的技术,属于ASP.NET MVC几大核心技术之一,在使用Routing之前,得先引入System.Web.Routing,但其实不用这么麻烦,因为在 ...
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...
- SSISDB2:使用TSQL执行Package
在SSISDB中,能够使用TSQL脚本执行Package:每执行一次Package,SSIS都会创建一个Operation 和一个执行实例(Execution Instance),每个Executio ...
- 解密jQuery事件核心 - 委托设计(二)
第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...
- 深入理解定时器系列第二篇——被誉为神器的requestAnimationFrame
× 目录 [1]引入 [2]特点 [3]使用[4]兼容[5]应用 前面的话 与setTimeout和setInterval不同,requestAnimationFrame不需要设置时间间隔.这有什么好 ...
- Android之计算缓存大小并且清空缓存
转载博客:http://www.2cto.com/kf/201503/385492.html 项目中碰到了计算缓存大小和清空缓存的功能,这个很常见的功能,几乎每个APP都有,以为实现很简单,网上搜了一 ...