DotNet中几种常用的加密算法

在.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) * 4;                var charBuffer = new char[base64ArraySize];
                Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);                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, 0, 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) * 4;                var charBuffer = new char[base64ArraySize];
                Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);                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, 0, 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(0, 8));
            des.Key = bKey;
            des.IV = bKey;            var ms = new System.IO.MemoryStream();            var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, 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 / 2;            byte[] inputByteArray = new byte[len];            int x;            for (x = 0; x < len; x++)
            {                var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }            var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
            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, 0, 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(8, 16);
        }

(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(8, 16);
        }

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);
            }
        }

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

时间: 2024-10-07 07:36:50

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

Java 中几种常用的线程池

Java 中几种常用的线程池 转载 : https://www.cnblogs.com/sachen/p/7401959.html 原创 2016年04月14日 23:29:01 标签: java / 线程池 / Executor 878 概述: 在java内置API中操作线程所用到的类为Thread.创建线程一般有两种方式, 继承Thread方式 实现Runnable方式,并以runnable作为target创建Thread 在Android中的耗时任务一般都需要另开线程来执行,常常需要用线程

java 中几种常用数据结构

Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.几个常用类的区别 1.ArrayList: 元素单个,效率高,多用于查询 2.Vector: 元素单个,线程安全,多用于查询 3.LinkedList:元素单个,多用于插入和删除 4.HashMap: 元素成对,元素可为空 5.HashTable: 元素成对,线程安全,元素不可为空 二.Vector.ArrayList和L

Java中几种常用的设置小数点后位数的方法

记录下几种常用的控制小数点后位数的方法,除了这几种还有很多方法也可以控制,但是用得不常见,下面是比较常见的几种方法 使用BigDecimal类对超长数字进行格式化控制 使用DecimalFormat格式化十进制数字 使用printf格式化输出 具体实现 package _12_26_test; import java.math.BigDecimal; import java.math.BigInteger; import java.text.DecimalFormat; /*控制小数点后位数的几

MySQL中四种常用存储引擎的介绍

MySQL常用的四种引擎的介绍 (1):MyISAM存储引擎: 不支持事务.也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 支持3种不同的存储格式,分别是:静态表:动态表:压缩表 静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复:缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把

C#中几种常用的集合的用法

集合:将一推数据类型相同的数据放入到一个容器内,该容器就是数组:内存中开辟的一连串空间. 非泛型集合 ArrayList集合: ArrayList是基于数组实现的,是一个动态数组,其容量能自动 增长 ArrayList的命名空间System.Collections 常用方法如下: 示例static void Main(string[] args) { ArrayList list = new ArrayList(); //添加单个元素 list.Add(true); list.Add(1); l

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

自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据全部存放在一个属性列表文件(*.plist文件)中, 具体步骤大致如下: 第一步:获得文件即将保存的路径: NSArray*documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,Y

java开发过程中几种常用算法

排序算法 排序算法中包括:简单排序.高级排序 简单排序 简单排序常用的有:冒泡排序.选择排序.插入排序 冒泡排序代码如下: 1 private static void bubbleSrot(int[] arr) { 2 3 for (int i = 0; i < arr.length - 1; i++) { 4 5 for (int j = i + 1; j < arr.length; j++) { 6 7 if (arr[i] > arr[j]) { 8 9 int temp = ar

c语言中几种常用变量类型

1.全局变量(外部变量) 在各文件所有函数之外定义的变量.可以被本文件所有函数引用.生存期整个程序 作用域:从定义变量位置起到本源文件(.c)结束. 外部变量作用域扩展: <1>在一个文件内扩展变量作用域:在定义点之前函数需要引用外部变量时,在引用前加extern声明外部变量(不常用) <2>将外部变量作用域扩展到其他文件extern int a::只在一个文件中定义外部变量,在其他文件加extern声明外部变量(即定义时不写extern) <3>将外部变量作用域限制在

.NET中四种常用事物

在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务逻辑有只要一步执行就可以完成了.因此掌握事务 处理的方法是很重要,进我的归类在.net中大致有以下4种事务处理的方法.大家可以参考一下,根据实际选择适当的事务处理. 1 SQL事务     sql事务是使用SQL server自身的事务:在存储过程中直接使用Begin Tran,Rollback Tran,Commit Tran实现事务: 优点:执行效率最佳 限制:事务上下文仅在数据库中调用,难以