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_ ...
随机推荐
- Unity3D游戏开发初探—4.开发一个“疯狂击箱子”游戏
一.预备知识—对象的”生“与”死“ (1)如何在游戏脚本程序中创建对象而不是一开始就创建好对象?->使用GameObject的静态方法:CreatePrimitive() 以上一篇的博文中的“指 ...
- 手工给Meteor增加smart package的方法
windows下无法装mrt(Meteor的包管理工具).不过还好smart package本身也就只是一个文件夹而已,不需要在Meteor中注册什么东西.所以直接把smart package扔到me ...
- 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)
这章的书写感觉很普通,是些基础的认知知识. 其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱. 再说点书上没有的.本来这些知识我打算另外分 ...
- Google分布式构建软件之一:获取源代码
本文原文在google开发者工具组的博客上[需要FQ],以下是我的翻译,欢迎转载,但尊重作者版权,注名原文地址. 在Google,所有的产品都是在主干上开发的.这样的好处:每个人都可以查看和修改代码, ...
- CSS效果集锦(持续更新中)
高亮光弧效果 使用CSS3实现的一个高亮光弧效果,当鼠标hover到某一个元素上时,一道光弧从左向右闪过,效果如下: 代码如下: <!DOCTYPE html> <html lang ...
- thinkPHP入门之二
thinkphp提供了很多便利的方法,因为php要记的东西太多了,而thinkphp极大简化了这些,让编写过程更加快速. 为了预防那些了解它的人胡乱玩耍,thinkphp提供一个函数_empty 它是 ...
- 视图必须派生自 WebViewPage 或 WebViewPage<TModel>
后端汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 后来发现原来吧web.config给删了 这就简单了,复制其他项目的web.conf ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码
在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...
- 深入理解javascript中的动态集合——NodeList、HTMLCollection和NamedNodeMap
× 目录 [1]NodeList [2]HTMLCollection [3]NamedNodeMap[4]注意事项 前面的话 一说起动态集合,多数人可能都有所了解.但是,如果再深入些,有哪些动态集合, ...
- Ubuntu杂记——双系统重装Win7后找不到Ubuntu的解决办法
之前装过Ubuntu和Win7的双系统,后来重装了Win7,发现Ubuntu不见了,那会没怎么用,也没去解决问题.现在再看Android内核剖析,大部分都是在Ubuntu环境下进行的,所以百度了一些方 ...