在.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);//将运算结果转换成stringvar 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);}}

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

转载于:https://blog.51cto.com/pengze0902/1864304

DotNet中几种常用的加密算法相关推荐

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

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

  2. 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】

    看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...

  3. 写出python字符串三种常用的函数或方法_python中几种常用字符串函数

    1.lower()把所有字符换成小写 2.upper()把所有字符换成大写 3.swapcase()大小写互换 4.title()把每个单词首字母大写,他是以所有英文字母的字符来区别是否为一个单词的, ...

  4. R中两种常用并行方法——2. snowfall

    上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...

  5. UI(1)---手机界面设计中12种常用布局

    手机界面设计中12种常用布局 手机界面设计中12种常用布局 转载自: 手机界面设计中12种常用布局 - 轩枫阁 总结下手机界面改版要考虑的布局,主要的分为以下2大类 主导航 列表式 陈列馆式 九宫馆式 ...

  6. IoT:加密与安全:几种常用安全加密算法原理与用途解析

    1.常用的加密算法分类 常见的加密算法可以分成五类: 对称加密算法.非对称加密算法和.Hash 算法(也称摘要算法).数字签名(Hash&RSA)和数字证书(Hash&RSA& ...

  7. JAVA中几种常用JSON库性能比较

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...

  8. Android中五种常用的menu

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

  9. python 中五种常用的数据类型

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

最新文章

  1. 比Python 3.8快20%,Pyston v2正式发布
  2. Java之戳中痛点 - (4)i++ 和 ++i 探究原理
  3. MongoDB导出场景查询优化 #1
  4. 链表线性表及其操作c语言代码大全,用链表实现线性表的各种操作(C语言)
  5. 各纬度气候分布图_读中国年平均气温分布图,寻找中国全年平均气温最高和最低的地方...
  6. 程序员三年的门槛该如何跨过去?
  7. 第4课 防卫导弹(第十章 动态规划--DP)
  8. web前端学习笔记(python)(一)
  9. qxdm无法安装问题闪一下_win10系统显示“出现了问题,无法安装功能”解决办法...
  10. 内核如何为各种系统调用服务
  11. php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端
  12. MySql绿色版安装和配置
  13. 绕过卡巴斯基dump进程lsass.exe内存
  14. Koo叔说Shader-贴图切换
  15. java 修改图片分辨率_java 修改图片的像素大小,清晰度
  16. 顶级赛事!2021 CCF大数据与计算智能大赛重磅开赛!
  17. 彻底关闭Chrome浏览器更新及右上角的更新提示
  18. 完美的正方形分割(二)
  19. 关闭页面出现确定,取消按钮
  20. 收藏 | 美国数字资产行政命令中文版全文

热门文章

  1. c语言未结束的引用标识符,2015年9月计算机二级《C语言》高分突破模拟卷(4)
  2. android 流式编程,流式编程
  3. 2021年春季学期-信号与系统-第九次作业参考答案-第五小题
  4. echarts词云图形状_怎么用Python画出好看的词云图?
  5. mysql远程权限grant_mysql 赋给用户远程权限 grant all privileges on
  6. websocket中发生数据丢失_为什么事实上却发生了数据丢失,只有少部 分数据可以加载进来...
  7. python3基础知识梳理(一)
  8. c++ time函数_Python22个构造函数法助力数据挖掘与分析
  9. oracle存储过程00054,oracle执行存储过程报错:ORA-12011
  10. 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测