简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace Wen.Helpers
{
/// <summary>
/// 安全助手
/// </summary>
public sealed class SecurityHelper
{
private static readonly byte [] IvBytes = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; #region 通用加密算法 /// <summary>
/// 哈希加密算法
/// </summary>
/// <param name="hashAlgorithm"> 所有加密哈希算法实现均必须从中派生的基类 </param>
/// <param name="input"> 待加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
private static string HashEncrypt( HashAlgorithm hashAlgorithm, string input, Encoding encoding)
{
var data = hashAlgorithm.ComputeHash(encoding.GetBytes(input)); return BitConverter .ToString(data).Replace( "-", "" );
} /// <summary>
/// 验证哈希值
/// </summary>
/// <param name="hashAlgorithm"> 所有加密哈希算法实现均必须从中派生的基类 </param>
/// <param name="unhashedText"> 未加密的字符串 </param>
/// <param name="hashedText"> 经过加密的哈希值 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
private static bool VerifyHashValue( HashAlgorithm hashAlgorithm, string unhashedText, string hashedText,
Encoding encoding)
{
return string .Equals(HashEncrypt(hashAlgorithm, unhashedText, encoding), hashedText,
StringComparison .OrdinalIgnoreCase);
} #endregion 通用加密算法 #region 哈希加密算法 #region MD5 算法 /// <summary>
/// MD5 加密
/// </summary>
/// <param name="input"> 待加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string MD5Encrypt( string input, Encoding encoding)
{
return HashEncrypt(MD5 .Create(), input, encoding);
} /// <summary>
/// 验证 MD5 值
/// </summary>
/// <param name="input"> 未加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static bool VerifyMD5Value( string input, Encoding encoding)
{
return VerifyHashValue(MD5 .Create(), input, MD5Encrypt(input, encoding), encoding);
} #endregion MD5 算法 #region SHA1 算法 /// <summary>
/// SHA1 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string SHA1Encrypt( string input, Encoding encoding)
{
return HashEncrypt(SHA1 .Create(), input, encoding);
} /// <summary>
/// 验证 SHA1 值
/// </summary>
/// <param name="input"> 未加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static bool VerifySHA1Value( string input, Encoding encoding)
{
return VerifyHashValue(SHA1 .Create(), input, SHA1Encrypt(input, encoding), encoding);
} #endregion SHA1 算法 #region SHA256 算法 /// <summary>
/// SHA256 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string SHA256Encrypt( string input, Encoding encoding)
{
return HashEncrypt(SHA256 .Create(), input, encoding);
} /// <summary>
/// 验证 SHA256 值
/// </summary>
/// <param name="input"> 未加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static bool VerifySHA256Value( string input, Encoding encoding)
{
return VerifyHashValue(SHA256 .Create(), input, SHA256Encrypt(input, encoding), encoding);
} #endregion SHA256 算法 #region SHA384 算法 /// <summary>
/// SHA384 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string SHA384Encrypt( string input, Encoding encoding)
{
return HashEncrypt(SHA384 .Create(), input, encoding);
} /// <summary>
/// 验证 SHA384 值
/// </summary>
/// <param name="input"> 未加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static bool VerifySHA384Value( string input, Encoding encoding)
{
return VerifyHashValue(SHA256 .Create(), input, SHA384Encrypt(input, encoding), encoding);
} #endregion SHA384 算法 #region SHA512 算法 /// <summary>
/// SHA512 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string SHA512Encrypt( string input, Encoding encoding)
{
return HashEncrypt(SHA512 .Create(), input, encoding);
} /// <summary>
/// 验证 SHA512 值
/// </summary>
/// <param name="input"> 未加密的字符串 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static bool VerifySHA512Value( string input, Encoding encoding)
{
return VerifyHashValue(SHA512 .Create(), input, SHA512Encrypt(input, encoding), encoding);
} #endregion SHA512 算法 #region HMAC-MD5 加密 /// <summary>
/// HMAC-MD5 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="key"> 密钥 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string HMACSMD5Encrypt( string input, string key, Encoding encoding)
{
return HashEncrypt(new HMACMD5 (encoding.GetBytes(key)), input, encoding);
} #endregion HMAC-MD5 加密 #region HMAC-SHA1 加密 /// <summary>
/// HMAC-SHA1 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="key"> 密钥 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string HMACSHA1Encrypt( string input, string key, Encoding encoding)
{
return HashEncrypt(new HMACSHA1 (encoding.GetBytes(key)), input, encoding);
} #endregion HMAC-SHA1 加密 #region HMAC-SHA256 加密 /// <summary>
/// HMAC-SHA256 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="key"> 密钥 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string HMACSHA256Encrypt( string input, string key, Encoding encoding)
{
return HashEncrypt(new HMACSHA256 (encoding.GetBytes(key)), input, encoding);
} #endregion HMAC-SHA256 加密 #region HMAC-SHA384 加密 /// <summary>
/// HMAC-SHA384 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="key"> 密钥 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string HMACSHA384Encrypt( string input, string key, Encoding encoding)
{
return HashEncrypt(new HMACSHA384 (encoding.GetBytes(key)), input, encoding);
} #endregion HMAC-SHA384 加密 #region HMAC-SHA512 加密 /// <summary>
/// HMAC-SHA512 加密
/// </summary>
/// <param name="input"> 要加密的字符串 </param>
/// <param name="key"> 密钥 </param>
/// <param name="encoding"> 字符编码 </param>
/// <returns></returns>
public static string HMACSHA512Encrypt( string input, string key, Encoding encoding)
{
return HashEncrypt(new HMACSHA512 (encoding.GetBytes(key)), input, encoding);
} #endregion HMAC-SHA512 加密 #endregion 哈希加密算法 #region 对称加密算法 #region Des 加解密 /// <summary>
/// DES 加密
/// </summary>
/// <param name="input"> 待加密的字符串 </param>
/// <param name="key"> 密钥(8位) </param>
/// <returns></returns>
public static string DESEncrypt( string input, string key)
{
try
{
var keyBytes = Encoding .UTF8.GetBytes(key);
//var ivBytes = Encoding.UTF8.GetBytes(iv); var des = DES .Create();
des.Mode = CipherMode .ECB; //兼容其他语言的 Des 加密算法
des.Padding = PaddingMode .Zeros; //自动补 0 using (var ms = new MemoryStream ())
{
var data = Encoding .UTF8.GetBytes(input); using (var cs = new CryptoStream (ms, des.CreateEncryptor(keyBytes, IvBytes), CryptoStreamMode .Write)
)
{
cs.Write(data, , data.Length);
cs.FlushFinalBlock();
} return Convert .ToBase64String(ms.ToArray());
}
}
catch
{
return input;
}
} /// <summary>
/// DES 解密
/// </summary>
/// <param name="input"> 待解密的字符串 </param>
/// <param name="key"> 密钥(8位) </param>
/// <returns></returns>
public static string DESDecrypt( string input, string key)
{
try
{
var keyBytes = Encoding .UTF8.GetBytes(key);
//var ivBytes = Encoding.UTF8.GetBytes(iv); var des = DES .Create();
des.Mode = CipherMode .ECB; //兼容其他语言的Des加密算法
des.Padding = PaddingMode .Zeros; //自动补0 using (var ms = new MemoryStream ())
{
var data = Convert .FromBase64String(input); using (var cs = new CryptoStream (ms, des.CreateDecryptor(keyBytes, IvBytes), CryptoStreamMode .Write)
)
{
cs.Write(data, , data.Length); cs.FlushFinalBlock();
} return Encoding .UTF8.GetString(ms.ToArray());
}
}
catch
{
return input;
}
} #endregion Des 加解密 #endregion 对称加密算法 #region 非对称加密算法 /// <summary>
/// 生成 RSA 公钥和私钥
/// </summary>
/// <param name="publicKey"> 公钥 </param>
/// <param name="privateKey"> 私钥 </param>
public static void GenerateRSAKeys( out string publicKey, out string privateKey)
{
using (var rsa = new RSACryptoServiceProvider ())
{
publicKey = rsa.ToXmlString( false );
privateKey = rsa.ToXmlString( true );
}
} /// <summary>
/// RSA 加密
/// </summary>
/// <param name="publickey"> 公钥 </param>
/// <param name="content"> 待加密的内容 </param>
/// <returns> 经过加密的字符串 </returns>
public static string RSAEncrypt( string publickey, string content)
{
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publickey);
var cipherbytes = rsa.Encrypt(Encoding .UTF8.GetBytes(content), false); return Convert .ToBase64String(cipherbytes);
} /// <summary>
/// RSA 解密
/// </summary>
/// <param name="privatekey"> 私钥 </param>
/// <param name="content"> 待解密的内容 </param>
/// <returns> 解密后的字符串 </returns>
public static string RSADecrypt( string privatekey, string content)
{
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privatekey);
var cipherbytes = rsa.Decrypt(Convert .FromBase64String(content), false); return Encoding .UTF8.GetString(cipherbytes);
} #endregion 非对称加密算法
}
}
简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)的更多相关文章
- [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
- 面向对象编程(封装、封装的意义、封装与扩展性、@property)
1.封装之如何实现属性的隐藏 封装: __x=1 # 把数据属性隐藏 (如何实现隐藏) 类定义阶段 __开头发生了变形 __x --> _A__x特点: 1.在类外部无法直接:obj.__Att ...
- Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装. Dapper的用法比较接近ADO.NET所以性能也是比较快.所以我们先来看看使用A ...
- SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...
- Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装
Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装 >>>>>> ...
- FFmpeg封装格式处理4-转封装例程
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10506662.html FFmpeg封装格式处理相关内容分为如下几篇文章: [1]. F ...
随机推荐
- IIS7.5 配置 PHP 5.3.5
本机环境:IIS7.5 windows2008 64位 首先确认IIS中启用了CGI功能: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdod ...
- centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
感谢朋友支持本博客.欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 关于错误errno EFAULT:Bad address
UDP socket : read error Bad address 在写UDP server.在调用套接字读取的时候发生了这个错误. 通过看errno.h 能够看到相应的错误号 EFAULT: ...
- [Node.js]DNS模块
摘要 nds模块是node.js用于解析域名的模块,对域名的解析非常快捷方便. DNS 引入dns模块 //引入dns模块 var dns=require("dns"); 方法 序 ...
- synchronized与lock,哪个效率更高
Java在一开始就提供了synchronized关键字,用于多线程之间的同步.它使用简便,不会出现拿锁之后不归还的情况,可以避免一些编程错误. 而jdk5时提供的concurrent包里,有一个Loc ...
- bit byte哪些事
1.bit 电脑中最小的计量单位,比如0或1代表一个bit,简称“位” 2.byte 电脑存储的基本单位.因为上面的bit小弟太小了,所以产生了byte.由8个bit存成了byte,最小为0最大为11 ...
- MAC之查看日历
命令:cal 查看当前月份 命令: cal 04 2001 查看2001年的4月份 echo命令: 打印信息
- 混沌数学之二维logistic模型
上一节讲了logistic混沌模型,这一节对其扩充一下讲二维 Logistic映射.它起着从一维到高维的衔接作用,对二维映射中混沌现象的研究有助于认识和预测更复杂的高维动力系统的性态.通过构造一次藕合 ...
- Informatica 常用组件Source Qualifier之八 Distinct
如果希望 PowerCenter 从源选择唯一值,您可以使用"选择相异"选项.例如,您可以使用此功能从列出总销售额的表中提取唯一客户标识.使用"选择相异"过滤器 ...
- HDU4183 起点到终点再到起点 除起点每点仅经过一次 网络流
题意: T个测试数据 n个圆 下面 fre x y r 表示圆的频率 坐标和半径 要求: 从频率为400(最小的) 圆 走到频率为789(最大)的圆,再走回来,除起点每个点只能经过一次 问这样的路径是 ...