DES加解密算法实现类
来源:互联网 发布:对数据直报系统的认识 编辑:程序博客网 时间:2024/05/16 11:21
/// <summary> /// 加密和解密类 /// </summary> public class EnOrDeCrypt { //密钥,可写成字符串,这里是从配置文件中获取 public static string strKey = Convert.ToString(ConfigurationSettings.AppSettings["strKey"]); public EnOrDeCrypt() { // // TODO: 在此处添加构造函数逻辑,可以什么都不写 // } #region Des算法加密过程 /// <summary> /// Des算法加密过程 /// </summary> /// <param name="strEncrypt"></param> /// <param name="strKey"></param> /// <returns></returns> public static string DesEncrypt(string strEncrypt, string strkey = null) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 byte[] inputByteArray = Encoding.Default.GetBytes(strEncrypt); //建立加密对象的密钥和偏移量 //建议密码长度为8位 if (String.IsNullOrEmpty(strkey)) { strKey = matchToKey(strKey, 8); des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); } else { strkey = matchToKey(strkey, 8); des.Key = ASCIIEncoding.ASCII.GetBytes(strkey); des.IV = ASCIIEncoding.ASCII.GetBytes(strkey); } //内存流 MemoryStream ms = new MemoryStream(); //加密转换流 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); //将byte数组通过加密器写入内存流 cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //得到加密后的字符串 StringBuilder ret = new StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } #endregion #region Des算法解密过程 /// <summary> /// Des算法解密过程 /// </summary> /// <param name="strDecrypt"></param> /// <param name="strKey"></param> /// <returns></returns> public static string DesDecrypt(string strDecrypt) { //内存流 MemoryStream ms = new MemoryStream(); try { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //将字符串转换成byte型数组 byte[] inputByteArray = new byte[strDecrypt.Length / 2]; for (int x = 0; x < strDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(strDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //转换成8位的密码 strKey = matchToKey(strKey, 8); des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); //解密转换流 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 StringBuilder ret = new StringBuilder(); //将加密后的数据通解密器转化成内存流 cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); } catch (Exception ex) { ms.Dispose(); string url = "/Train/error.aspx?ErrorMessage=" + "参数错误。"; System.Web.HttpContext.Current.Response.Redirect(url); } return System.Text.Encoding.Default.GetString(ms.ToArray()); } #endregion #region 将字符串转换成指定位数,不足补'A',多了截取 /// <summary> /// 将字符串转换成指定位数,不足补'A',多了截取 /// </summary> /// <param name="strKey">初始字符串</param> /// <param name="iLength">要得到的字符串长度</param> /// <returns>转换后的结果</returns> public static string matchToKey(string strKey, int iLength) { if (strKey.Length < iLength) { string strTemp = ""; for (int i = 0; i < iLength - strKey.Length; i++) { strTemp += "A";//不足位用字母'A'补齐 } strKey += strTemp; } else { strKey = strKey.Substring(0, iLength); } return strKey; } #endregion #region .net中md5不可逆加密算法实现 /// <summary> /// .net中md5不可逆加密算法实现 /// </summary> /// <param name="strData">初始数据</param> /// <returns>加密后的结果字符串</returns> public static string MD5(string strData) { //将字符串转换成Byte型数组 byte[] btData = System.Text.Encoding.Default.GetBytes(strData); //得到加密后的Byte型数组 btData = new MD5CryptoServiceProvider().ComputeHash(btData); //将加密后的Byte型数组转换成字符串 string ret = ""; for (int i = 0; i < btData.Length; i++) { ret += btData[i].ToString("x").PadLeft(2, '0'); } return ret; } #endregion }
阅读全文
1 0
- DES加解密算法实现类
- DES加解密算法实现
- DES加解密算法Qt实现
- java实现DES加解密算法
- DES加解密算法实现详解
- DES加解密算法
- DES加解密算法
- 用vb实现DES加解密算法(三)--解密
- DES加解密算法详解
- java des加解密算法
- 3DES加解密算法
- DES、3DES 加解密;MAC算法
- DES加解密+C实现
- Java实现DES加解密
- 用VB实现DES加解密算法(一)--定义
- 用vb实现DES加解密算法(二)--加密
- Java☞DES加解密算法简介及实现
- DES加解密工具类
- python提取mysql中中文数据,显示乱码
- Tomcat类加载机制和JAVA类加载机制的比较
- Hello World
- 世峰数字科技获得OHSAS18001国际认证sufencg.com
- EM算法原理详解
- DES加解密算法实现类
- 1.Network Manager组件 和 Network Maneger HUD组件
- 可视化算法加强记忆
- 系统日志
- Coursera 机器学习(by Andrew Ng)课程学习笔记(七)——支持向量机
- elasticsearch mapping
- Tomcat服务器配置
- java 迭代器Iterator 遍历问题
- du 使用详解 查看一级目录大小