C#加密算法总结

MD5加密

         /// <summary>
/// MD5加密
/// </summary>
/// <param name="strPwd">原字符串</param>
/// <returns>加密后字符串</returns>
public static string GetMD5(string strPwd)
{
//MD5 对象创建的两种方式
//MD5 md5 = MD5.Create();
MD5 md5 = new MD5CryptoServiceProvider();
//将输入的密码转换成字节数组
byte[] bPwd = Encoding.UTF8.GetBytes(strPwd);
//计算指定字节数组的哈希值
byte[] bMD5 = md5.ComputeHash(bPwd);
//释放加密服务提供类的所有资源
md5.Clear();
StringBuilder sbMD5Pwd = new StringBuilder();
for (int i = ; i < bMD5.Length; i++)
{
//将每个字节数据转换为2位的16进制的字符
sbMD5Pwd.Append(bMD5[i].ToString("x2"));
}
return sbMD5Pwd.ToString();
}

SHA1加密

         /// <summary>
/// 使用 SHA1 加密算法来加密
/// </summary>
/// <param name="sourceString">原字符串</param>
/// <returns>加密后字符串</returns>
public static string SHA1_Encrypt(string sourceString)
{
byte[] StrRes = Encoding.UTF8.GetBytes(sourceString);
HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
StrRes = iSHA.ComputeHash(StrRes);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in StrRes)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString();
}

SHA256加密

         /// <summary>
/// SHA256 加密
/// </summary>
/// <param name="sourceString">原字符串</param>
/// <returns>加密后字符串</returns>
public static string SHA256_Encrypt(string sourceString)
{
byte[] data = Encoding.UTF8.GetBytes(sourceString);
SHA256 shaM = SHA256.Create();
byte[] result = shaM.ComputeHash(data);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in result)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString();
}

SHA384加密

         /// <summary>
/// SHA384 加密
/// </summary>
/// <param name="sourceString">原字符串</param>
/// <returns>加密后字符串</returns>
public static string SHA384_Encrypt(string sourceString)
{
byte[] data = Encoding.UTF8.GetBytes(sourceString);
SHA384 shaM = SHA384.Create();
byte[] result = shaM.ComputeHash(data);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in result)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString();
}

SHA512加密

         /// <summary>
/// SHA512_加密
/// </summary>
/// <param name="sourceString">原字符串</param>
/// <returns>加密后字符串</returns>
public static string SHA512_Encrypt(string sourceString)
{
byte[] data = Encoding.UTF8.GetBytes(sourceString);
SHA512 shaM = new SHA512Managed();
byte[] result = shaM.ComputeHash(data);
StringBuilder EnText = new StringBuilder();
foreach (byte iByte in result)
{
EnText.AppendFormat("{0:x2}", iByte);
}
return EnText.ToString();
}

AES加密、解密

         /// <summary>
/// AES加密
/// </summary>
/// <param name="encryptStr">加密字符串</param>
/// <param name="encryptKey">密钥</param>
/// <returns>密码</returns>
public static string AESEncrypt(string encryptStr, string encryptKey)
{
if (string.IsNullOrWhiteSpace(encryptStr))
return string.Empty; encryptKey = StringHelper.SubString(encryptKey, );
encryptKey = encryptKey.PadRight(, ' '); //分组加密算法
SymmetricAlgorithm des = Rijndael.Create();
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);//得到需要加密的字节数组
//设置密钥及密钥向量
des.Key = Encoding.UTF8.GetBytes(encryptKey);
des.IV = _aeskeys;
byte[] cipherBytes = null;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cipherBytes = ms.ToArray();//得到加密后的字节数组
cs.Close();
ms.Close();
}
}
return Convert.ToBase64String(cipherBytes);
} /// <summary>
/// AES解密
/// </summary>
/// <param name="decryptStr">解密字符串</param>
/// <param name="decryptKey">密钥</param>
/// <returns>原码</returns>
public static string AESDecrypt(string decryptStr, string decryptKey)
{
if (string.IsNullOrWhiteSpace(decryptStr))
return string.Empty; decryptKey = StringHelper.SubString(decryptKey, );
decryptKey = decryptKey.PadRight(, ' '); byte[] cipherText = Convert.FromBase64String(decryptStr); SymmetricAlgorithm des = Rijndael.Create();
des.Key = Encoding.UTF8.GetBytes(decryptKey);
des.IV = _aeskeys;
byte[] decryptBytes = new byte[cipherText.Length];
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
{
cs.Read(decryptBytes, , decryptBytes.Length);
cs.Close();
ms.Close();
}
}
return Encoding.UTF8.GetString(decryptBytes).Replace("\0", "");//将字符串后尾的'\0'去掉
}

DES加密

  

         /// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(, ));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
} /// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(, ));
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, , inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptString;
}
}

加密方法封装代码:

 using System.IO;
using System.Security.Cryptography;
using System.Text; namespace EncryptTools
{
public class EncryptHelper
{
/// <summary>
/// 获取某个哈希算法对应下的哈希值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <param name="algorithm">哈希算法</param>
/// <returns>经过计算的哈希值</returns>
private static string GetHash(string sourceString, HashAlgorithm algorithm)
{
byte[] sourceBytes = Encoding.UTF8.GetBytes(sourceString);
byte[] result = algorithm.ComputeHash(sourceBytes);
algorithm.Clear();
StringBuilder sb = new StringBuilder();
for (int i = ; i < result.Length; i++)
{
sb.Append(result[i].ToString("X2"));
}
return sb.ToString();
} /// <summary>
/// 获取MD5值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <returns>MD5值</returns>
public static string GetMD5(string sourceString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
return GetHash(sourceString, md5);
} /// <summary>
/// 获取SHA1值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <returns>SHA1值</returns>
public static string GetSHA1(string sourceString)
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
return GetHash(sourceString, sha1);
} /// <summary>
/// 获取SHA256值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <returns>SHA256值</returns>
public static string GetSHA256(string sourceString)
{
SHA256 sha256 = SHA256.Create();
return GetHash(sourceString, sha256);
} /// <summary>
/// 获取SHA384值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <returns>SHA384值</returns>
public static string GetSHA384(string sourceString)
{
SHA384 sha384 = SHA384.Create();
return GetHash(sourceString, sha384);
} /// <summary>
/// 获取SHA512值
/// </summary>
/// <param name="sourceString">源字符串</param>
/// <returns>SHA512值</returns>
public static string GetSHA512(string sourceString)
{
SHA512 sha512 = SHA512.Create();
return GetHash(sourceString, sha512);
} public static string GetFileBase64String(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (BinaryReader reader = new BinaryReader(fs))
{
try
{
return GetBase64String(reader.ReadBytes((int)fs.Length));
}
catch (System.Exception ex)
{
throw ex;
}
}
}
} public static string GetBase64String(string sourceString)
{
byte[] buffer = Encoding.UTF8.GetBytes(sourceString);
return GetBase64String(buffer);
} public static string GetBase64String(string sourceString, Encoding encoding)
{
byte[] buffer = encoding.GetBytes(sourceString);
return GetBase64String(buffer);
} public static string GetBase64String(byte[] sourceBytes)
{
string base64String = System.Convert.ToBase64String(sourceBytes);
return base64String;
}
}
}

C#加密算法总结的更多相关文章

  1. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  2. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  3. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

  4. Android数据加密之异或加密算法

    前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...

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

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

  6. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  7. java单向加密算法小结(1)--Base64算法

    从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...

  8. 显示本地openssl支持的加密算法

    参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...

  9. .net(c#)版RSA加密算法,拿走不谢

    今天有同学对接一个支付平台,涉及到RSA的签名和验签.由于对方是java的sdk,翻成c#语言时,搞了半天也没搞定.网上搜的东西都是各种copy还不解决问题. 碰巧,我之前对接过连连银通的网银支付和代 ...

  10. 加密算法中BASE64、MD5、SHA、HMAC等之间的区别

    http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...

随机推荐

  1. 数据库时间createtime字段 数据类型的选取

    之前是一直在用datetime类型(db)精度到yyyy-MM-dd HH:mm:ss 或者 date类型 精度到 yyyy-MM-dd 用了框架自动注入功能,自己也没去深入没去管他的set赋值值等等 ...

  2. 协作图 Collaboration diagram

    概述 协作图也是一种交互图,但一般用的比较少,一般用在大概分析一下对象之间是怎样交互的,跟顺序图是可以相互转化的. 协作图的用处: 在分析的时候(而顺序图一般设计的时候),分析出有哪些对象: 在白板上 ...

  3. 为android项目集成maven

    为什么要为android项目增加maven集成功能呢?这里我想到几个主要理由: 部署测试人员和开发人员的角色分离,让他们摆脱eclipse开发环境设置android sdk环境,直接在服务器上运行一个 ...

  4. Android代码优化——使用Android lint工具

    作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常 ...

  5. ASP.NET绑定控件语法

    1.DropDownList 前端代码aspx: <asp:DropDownList ID="ddl_meetingroom" runat="server" ...

  6. jquery select选中表单特效三级联动

    好久没发帖了,今天发一个jquery select的表单三级联动,希望能对有需要的朋友有点帮助. js代码,当然还要加上jquery的包,应该都有的,这里就不发了. <script type=& ...

  7. 基于MSP430F413水果电池供电的低功耗时钟

      我最早接触MSP430时候,看到书的第一页就是一张水果电池的图片,一直以来想做一个低功耗的可以水果电池供电的系统,毕业之后的下半年选择MSP430F413单片机来画了一个低功耗的板子,一直没有调试 ...

  8. sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)

    Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...

  9. [Python] Debugger in Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50214459 From: http://blog.csdn.net/u013088062 ...

  10. 当他们也换成了Linux OS

    近期,斯诺登的事闹得沸沸扬扬,美帝损失了公信.又有传言说Win8给美帝安全局留了后门?XP依旧是生命力旺盛. 还不就是因为那点事儿,看不到人家的源代码? 斗胆提一个问题,如果公务员们或者是一部分,开始 ...