C#封装加密算法(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, 0, 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, 0, 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 非对称加密算法
}
}
C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类的更多相关文章
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- BASE64与单向加密算法MD5&SHA&MAC
言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. 如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...
- Java中常用的加密算法MD5,SHA,RSA
1. MD5加密,常用于加密用户名密码,当用户验证时. protected byte[] encrypt(byte[] obj){ try { MessageDigest md5 = Messag ...
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
package com.ice.webos.util.security; import java.io.UnsupportedEncodingException; import java.math.B ...
- python 面向对象:封装---对象的属性可以是另一个类创建的对象
# 对象封装:对象的属性可以是另一个类创建的对象 # 案例需求: # 1.士兵许三多有一把AK47 # 2.士兵用枪射击标靶 # 3.枪能装填和发射子弹 class Gun: # 分析: # 枪的属性 ...
- Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法
● BASE64 严格地说,属于编码格式,而非加密算法 ● MD5(Message Digest algorithm 5,信息摘要算法) ● SHA(Secure Hash Algo ...
- 加密算法—MD5、RSA、DES
最近因为要做一个加密的功能,简单了解了一下加密算法,现在比较常用的有三个加密算法MD5加密算法.RSA加密算法.DES加密算法. MD5加密算法 定义:MD5算法是将任意长度的“字 ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
- MD5 不可逆加密,Des对称可逆加密 ,RSA非对称可逆加密 ,数字证书 SSL
:MD5 不可逆加密2:Des对称可逆加密3:RSA非对称可逆加密4:数字证书 SSL Anker_张(博客园)http://www.cnblogs.com/AnkerZhang/ 1:MD5 不可逆 ...
- MD5 SHA1 HMAC HMAC_SHA1区别
MD5.SHA1.HMAC.HMAC_SHA1区别 引言 什么是MD5,什么是SHA1,如何校验这些Hash.还有拿单个apk文件的MD5,SHA1讯问是不是原版的问题,在这里,让我们先来了解 ...
随机推荐
- 网站加载有商务通、商桥,定义js函数触发快商通代码
有的网站已经加载了商务通.商桥的,前期定义了js函数 触发商务通.商桥代码的,可以重新定义新的函数对之前的函数进行覆盖,其 js代码为: var domain = document.domain; / ...
- TDirectory.IsRelativePath是否相对路径
使用函数: System.IOUtils.TDirectory.IsRelativePath class function IsRelativePath(const Path: string): Bo ...
- lucene 实现word,pdf全文检索源码
创建索引: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import jav ...
- Emmet Documentation
src:http://docs.emmet.io/cheat-sheet/ Emmet Documentation Syntax Child: > nav>ul>li <n ...
- asp.net MVC FileResult在IE下异常的解决办法
var encoding = System.Text.Encoding.UTF8; Response.Charset = encoding.WebName; Response.HeaderEncodi ...
- 修改PHP上传大小设置
目前文档文库上传大小是读取服务器的PHP环境的设置,你们的PHP环境上传限制是多少,这里显示的就是多少. 很多用户问我如何修改上传大小,自己可以百度一下方法,也可以根据以下步骤修改: 1.找到服务务器 ...
- String, StringBuffer, StringBuilder比较
1.见API: String是不可变的字符序列: StringBuffer是线程安全的,可变的字符序列: StringBuilder是可变的字符序列: StringBuffer与String的区别是S ...
- http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
- CAS单点登录配置[1]:准备工作
关于CAS是什么这里就不在赘述,网友将它比喻成旅游景点的套票,买了一个套票就可以观看所有景点,不需要一个景点买一次票...我们重点介绍CAS单点登录的配置. 工具/原料 1.配置好JDK环境,否则不方 ...
- iOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...