#region

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; #endregion namespace Wen.Helpers.Common
{
/// <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 HmacMd5Encrypt(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 非对称加密算法
}
}

  【GitHub】https://github.com/liqingwen2015/Wen.Helpers

[C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)的更多相关文章

  1. 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  2. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  4. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  5. 面向对象编程(封装、封装的意义、封装与扩展性、@property)

    1.封装之如何实现属性的隐藏 封装: __x=1 # 把数据属性隐藏 (如何实现隐藏) 类定义阶段 __开头发生了变形 __x --> _A__x特点: 1.在类外部无法直接:obj.__Att ...

  6. Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装

    前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装. Dapper的用法比较接近ADO.NET所以性能也是比较快.所以我们先来看看使用A ...

  7. SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装

    SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...

  8. Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装

    Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装 >>>>>> ...

  9. FFmpeg封装格式处理4-转封装例程

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10506662.html FFmpeg封装格式处理相关内容分为如下几篇文章: [1]. F ...

随机推荐

  1. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  2. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  3. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  4. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付                  今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...

  6. 【iOS】Xcode8+Swift3 纯代码模式实现 UICollectionView

    开发环境 macOS Sierra 10.12.Xcode 8.0,如下图所示: 总体思路 1.建立空白的storyboard用于呈现列表 2.实现自定义单个单元格(继承自:UICollectionV ...

  7. ABP项目中使用Swagger生成动态WebAPI

    本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...

  8. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  9. (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Cor ...

  10. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...