博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3DES加密/解密
阅读量:4654 次
发布时间:2019-06-09

本文共 5579 字,大约阅读时间需要 18 分钟。

///     /// C#/PHP/JSP 3DES 加密与解密(只支持UTF-8编码)    ///     public class Crypto3DES    {        ///         /// 默认密钥        ///         private string Keys;        ///         /// 密钥与加密字符串不足8字符时的填充字符        ///         private char paddingChar = ' ';        ///         /// 实例化 Crypto3DES 类        ///         /// 密钥        public Crypto3DES(string key)        {            this.Keys = key;        }        ///         /// 获取密钥,不足8字符的补满8字符,超过8字符的截取前8字符        ///         /// 密钥        /// 
private string GetKeyCode(string key) { if (key.Length > 8) return key.Substring(0, 8); else return key.PadRight(8, paddingChar); } /// /// 获取加密字符串,不足8字符的补满8字符 /// /// The STR string. ///
private string GetString(string strString) { if (strString.Length < 8) return strString.PadRight(8, paddingChar); return strString; } /// /// 加密 /// /// 加密字符串 ///
public string Encrypt(string strString) { try { strString = this.GetString(strString); DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); DES.Key = Encoding.UTF8.GetBytes(this.GetKeyCode(this.Keys)); DES.Mode = CipherMode.ECB; DES.Padding = PaddingMode.Zeros; ICryptoTransform DESEncrypt = DES.CreateEncryptor(); byte[] Buffer = Encoding.UTF8.GetBytes(strString); return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length)); } catch (Exception ex) { return ex.Message; } } /// /// 解密 /// /// 解密字符串 ///
public string Decrypt(string strString) { try { DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); DES.Key = Encoding.UTF8.GetBytes(this.GetKeyCode(this.Keys)); DES.Mode = CipherMode.ECB; DES.Padding = PaddingMode.Zeros; ICryptoTransform DESDecrypt = DES.CreateDecryptor(); byte[] Buffer = Convert.FromBase64String(strString); return UTF8Encoding.UTF8.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length)).Replace("\0", "").Trim(); } catch (Exception ex) { return ex.Message; } } #region DESEnCode DESDeCode /// /// 加密 与Java通用加密 /// /// 需要加密的字符 /// 密钥,8位的ASCII字符 ///
public string DESEnCode(string pToEncrypt) { if (string.IsNullOrEmpty(pToEncrypt)) return string.Empty; try { pToEncrypt = System.Web.HttpContext.Current.Server.UrlEncode(pToEncrypt); string key = this.Keys; DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(key); des.IV = ASCIIEncoding.ASCII.GetBytes(key); System.IO.MemoryStream ms = new System.IO.MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } cs.Close(); cs.Dispose(); ms.Close(); ms.Dispose(); return ret.ToString(); } catch (System.Exception ex) { return ex.Message; } } /// /// 解密数据 与Java通用解密 /// /// 解密的字符 /// 密钥,8位的ASCII字符 ///
public string DESDeCode(string pToEncrypt) { if (string.IsNullOrEmpty(pToEncrypt)) return string.Empty; try { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); int len = pToEncrypt.Length / 2; byte[] inputByteArray = new byte[len]; int x, i; for (x = 0; x < len; x++) { i = Convert.ToInt32(pToEncrypt.Substring(x * 2, 2), 16); inputByteArray[x] = (byte)i; } string key = this.Keys; des.Key = ASCIIEncoding.ASCII.GetBytes(key); des.IV = ASCIIEncoding.ASCII.GetBytes(key); 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(); string ret = System.Web.HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray())); cs.Close(); cs.Dispose(); ms.Close(); ms.Dispose(); return ret; } catch (System.Exception ex) { return ex.Message; } } #endregion }
Crypto3DES des = new Crypto3DES("key");

 

转载于:https://www.cnblogs.com/New-world/p/3166574.html

你可能感兴趣的文章
从面试官角度来告诉大家,哪些人能面试成功
查看>>
以我的亲身经历为例,告诉大家写简历和面试的技巧(面向高级开发和架构师)...
查看>>
一个简单的PHP网站结构
查看>>
Redis 学习之简介及安装
查看>>
jsp简单的学习
查看>>
[LeetCode][JavaScript]Number of 1 Bits
查看>>
[LeetCode][JavaScript]Plus One
查看>>
C语言-06复杂数据类型-01数组
查看>>
同余方程 2012年NOIP全国联赛提高组
查看>>
vue 图片预览插件
查看>>
深入解析:分布式系统的事务处理经典问题及模型
查看>>
python的2种字符串格式化输出
查看>>
Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)
查看>>
配置 SQL Server Email 发送以及 Job 的 Notification通知功能
查看>>
线上应用bug跟踪查找-友盟统计
查看>>
07 数据结构
查看>>
docker学习(一)
查看>>
django.db.migrations.exceptions.InconsistentMigrationHistory django报错
查看>>
linux shell编程指南第十八章------控制流结构
查看>>
iOS设备信息
查看>>