在.NET项目中,我们较多的使用到加密这个操作。因为在现代的项目中,对信息安全的要求越来越高,那么多信息的加密就变得至关重要。现在提供几种常用的加密/解密算法。

1.用于文本和Base64编码文本的互相转换 和 Byte[]和Base64编码文本的互相转换:

(1).将普通文本转换成Base64编码的文本

       /// <summary>
/// 将普通文本转换成Base64编码的文本
/// </summary>
/// <param name="value">普通文本</param>
/// <returns></returns>
public static string StringToBase64String(string value)
{
if (string.IsNullOrEmpty(value))
{
throw new ArgumentNullException(value);
}
try
{
var binBuffer = (new UnicodeEncoding()).GetBytes(value);
var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * ;
var charBuffer = new char[base64ArraySize];
Convert.ToBase64CharArray(binBuffer, , binBuffer.Length, charBuffer, );
var s = new string(charBuffer);
return s;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} }

(2).将Base64编码的文本转换成普通文本

        /// <summary>
/// 将Base64编码的文本转换成普通文本
/// </summary>
/// <param name="base64">Base64编码的文本</param>
/// <returns></returns>
public static string Base64StringToString(string base64)
{
if (string.IsNullOrEmpty(base64))
{
throw new ArgumentNullException(base64);
}
try
{
var charBuffer = base64.ToCharArray();
var bytes = Convert.FromBase64CharArray(charBuffer, , charBuffer.Length);
return (new UnicodeEncoding()).GetString(bytes);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

(3).将Byte[]转换成Base64编码文本

        /// <summary>
/// 将Byte[]转换成Base64编码文本
/// </summary>
/// <param name="binBuffer">Byte[]</param>
/// <returns></returns>
public string ToBase64(byte[] binBuffer)
{
if (binBuffer == null)
{
throw new ArgumentNullException("binBuffer");
}
try
{
var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * ;
var charBuffer = new char[base64ArraySize];
Convert.ToBase64CharArray(binBuffer, , binBuffer.Length, charBuffer, );
var s = new string(charBuffer);
return s;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} }

(4).将Base64编码文本转换成Byte[]

       /// <summary>
/// 将Base64编码文本转换成Byte[]
/// </summary>
/// <param name="base64">Base64编码文本</param>
/// <returns></returns>
public byte[] Base64ToBytes(string base64)
{
if (string.IsNullOrEmpty(base64))
{
throw new ArgumentNullException(base64);
}
try
{
var charBuffer = base64.ToCharArray();
var bytes = Convert.FromBase64CharArray(charBuffer, , charBuffer.Length);
return bytes;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

2. DES加密/解密类。

(1).加密

  private static readonly string KEY = "pengze0902";

        /// <summary>
/// 加密
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public static string Encrypt(string Text)
{
return Encrypt(Text, KEY);
}
/// <summary>
/// 加密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Encrypt(string Text, string sKey)
{
var des = new DESCryptoServiceProvider();
var inputByteArray = Encoding.Default.GetBytes(Text);
var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(, ));
des.Key = bKey;
des.IV = bKey;
var ms = new System.IO.MemoryStream();
var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
var ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}

(2).解密

   private static readonly string KEY = "pengze0902";
/// <summary>
/// 解密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string Decrypt(string text)
{
return Decrypt(text, KEY);
} /// <summary>
/// 解密数据
/// </summary>
/// <param name="text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Decrypt(string text, string sKey)
{
var des = new DESCryptoServiceProvider();
var len = text.Length / ;
byte[] inputByteArray = new byte[len];
int x;
for (x = ; x < len; x++)
{
var i = Convert.ToInt32(text.Substring(x * , ), );
inputByteArray[x] = (byte)i;
}
var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(, ));
des.Key = bKey;
des.IV = bKey;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}

(3).取得MD5加密串

        //// <summary>
/// 取得MD5加密串
/// </summary>
/// <param name="input">源明文字符串</param>
/// <returns>密文字符串</returns>
public static string Md5Hash(string input)
{
var md5 = new MD5CryptoServiceProvider();
var bs = Encoding.UTF8.GetBytes(input);
bs = md5.ComputeHash(bs);
var s = new StringBuilder();
foreach (var b in bs)
{
s.Append(b.ToString("x2").ToUpper());
}
var password = s.ToString();
return password;
}

3.MD5加密

(1). 32位大写

        /// <summary>
/// 32位大写
/// </summary>
/// <returns></returns>
public static string Upper32(string s)
{
var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
if (hashPasswordForStoringInConfigFile != null)
s = hashPasswordForStoringInConfigFile.ToString();
return s.ToUpper();
}

(2). 32位小写

        /// <summary>
/// 32位小写
/// </summary>
/// <returns></returns>
public static string Lower32(string s)
{
var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
if (hashPasswordForStoringInConfigFile != null)
s = hashPasswordForStoringInConfigFile.ToString();
return s.ToLower();
}

(3).16位大写

        /// <summary>
/// 16位大写
/// </summary>
/// <returns></returns>
public static string Upper16(string s)
{
var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
if (hashPasswordForStoringInConfigFile != null)
s = hashPasswordForStoringInConfigFile.ToString();
return s.ToUpper().Substring(, );
}

(4).16位小写

        /// <summary>
/// 16位小写
/// </summary>
/// <returns></returns>
public static string Lower16(string s)
{
var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
if (hashPasswordForStoringInConfigFile != null)
s = hashPasswordForStoringInConfigFile.ToString();
return s.ToLower().Substring(, );
}

4.Sha1签名算法

        /// <summary>
/// 签名算法
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string GetSha1(string str)
{
if (string.IsNullOrEmpty(str))
{
throw new ArgumentNullException(str);
}
try
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
var enc = new ASCIIEncoding();
var dataToHash = enc.GetBytes(str);
//Hash运算
var dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
var hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} }

5.Sha256加密算法

       /// <summary>
/// 将字符串转换为sha256散列
/// </summary>
/// <param name="data">字符串进行转换</param>
/// <returns>sha256散列或null</returns>
public static string ToSha256(this string data)
{
try
{
if (string.IsNullOrEmpty(data))
return null; var hashValue = new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(data));
var hex = hashValue.Aggregate("", (current, x) => current + String.Format("{0:x2}", x)); if (string.IsNullOrEmpty(hex))
throw new Exception("Erro creating SHA256 hash"); return hex;
}
catch (Exception e)
{
throw new Exception(e.Message, e);
}
}

以上是一些较为常用的算法代码。

DotNet中几种常用的加密算法的更多相关文章

  1. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  2. 【Android 界面效果28】Android应用中五种常用的menu

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  3. C#中四种常用集合的运用(非常重要)

    C#中4个常用的集合 1.ArrayList ArrayList类似于数组,有人也称它为数组列表.ArrayList可以动态维护,而数组的容量是固定的. 它的索引会根据程序的扩展而重新进行分配和调整. ...

  4. Android中五种常用的menu

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  5. java 中几种常用数据结构

    Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.几个常用类的区别 1.A ...

  6. Android UI开发第二十九篇——Android中五种常用的menu(菜单)

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  7. 二、python 中五种常用的数据类型

    一.字符串 单引号定义: str1 = 'hello' 双引号定义: str1 = "hello" 三引号定义:""" 人生苦短, 我用python! ...

  8. iOS中几种常用的数据存储方式

    自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  9. 总结PHP中几种常用的网页跳转代码

    网页跳转的意思就是指当你在浏览器中访问A页面时,会自动跳转到B页面,往往网页跳转用在404页面中会比较多点.至于怎么实现网页跳转,网上已经提供了很多的方法,有些方法是不可行的,经过测试,叶德华今天就在 ...

随机推荐

  1. *HDU1907 博弈

    John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  2. Spring MVC 框架的架包分析,功能作用,优点

    由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...

  3. Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序

    XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序不仅能在个人电脑上运行,还能用在iOS. ...

  4. 非常郁闷的 .NET中程序集的动态加载

    记载这篇文章的原因是我自己遇到了动态加载程序集的问题,而困扰了一天之久. 最终看到了这篇博客:http://www.cnblogs.com/brucebi/archive/2013/05/22/Ass ...

  5. C#集合类型大盘点

    C#集体类型( Collections in C#) 集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话 ...

  6. Windows建立Cucumber和Ruby测试环境

    1. 下载安装Ruby1.9.3, 不要用RubyInstall 一键安装,下载zip然后解压到c:\Ruby193 (不要用2.0,用2.0安装不成功,不要怪我) 2. 环境变量配置RUBY_HOM ...

  7. [.net 面向对象程序设计深入](0) 开篇

    [.net 面向对象程序设计深入](0)开篇        [.net 面向对象编程基础]和 [.net 面向对象程序设计进阶]在15年底写完了,群里也加进来不少热爱学习的小伙伴.让我深切感受到在这个 ...

  8. ASP.NET MVC 5 -从控制器访问数据模型

    在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生 ...

  9. 微信为什么发布 Mac 版?

    因为 Mac 就是好啊就是好啊,就是好…… 打完收工,谢谢,鼓掌 piapiapia……晚安! 这么写在京城行走会不会挨板砖呢?头像已经印到书上满世界的发出去了,虽然考虑到行走江湖求一个稳字,我还特意 ...

  10. [译]如何防止elasticsearch的脑裂问题

    本文翻译自blog.trifork.com的博文 地址是http://blog.trifork.com/2013/10/24/how-to-avoid-the-split-brain-problem- ...