UBT框架加解密工具项目 UBT.Framework.Encryption
DESEncrypt.cs
//===================================================================================== // All Rights Reserved , Copyright@ UBT 2016 //===================================================================================== using System; using System.Configuration; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; namespace UBT.Encrypt.Tools { /// <summary> /// 版 本:2.0 /// 创 建:zhangpeng /// 日 期:2017-04-26 14:41 /// 描 述:DES 加密、解密帮助类,加入深度加解密算法 /// </summary> public class DESEncrypt { /// <summary> /// 密钥,必须8位 /// </summary> private static readonly string StrKey = string.IsNullOrEmpty(ConfigurationManager.AppSettings["Key"]) ? "MJShanxi" : ConfigurationManager.AppSettings["Key"]; /// <summary> /// 源字符串 /// </summary> private static readonly string SourceStr = string.IsNullOrEmpty(ConfigurationManager.AppSettings["SourceStr"]) ? "s" : ConfigurationManager.AppSettings["SourceStr"]; /// <summary> /// 替换字符串 /// </summary> private static readonly string ReplaceStr = string.IsNullOrEmpty(ConfigurationManager.AppSettings["ReplaceStr"]) ? "mjshanxi" : ConfigurationManager.AppSettings["ReplaceStr"]; #region DES加密 /// <summary> /// DES加密 /// </summary> /// <param name="text">要加密的字符串</param> /// <returns>以Base64格式返回的加密字符串</returns> public static string Encrypt(string text) { return Encrypt(text, StrKey); } /// <summary> /// DES加密 /// </summary> /// <param name="text">要加密的字符串</param> /// <param name="sKey">密钥,且必须8位</param> /// <returns>以Base64格式返回的加密字符串</returns> public static string Encrypt(string text, string sKey) { using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] inputByteArray; inputByteArray = Encoding.UTF8.GetBytes(text); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); string str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } } } #endregion #region DES解密 /// <summary> /// DES解密 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string Decrypt(string text) { if (!string.IsNullOrEmpty(text)) { return Decrypt(text, StrKey); } else { return ""; } } /// <summary> /// 解密数据 /// </summary> /// <param name="text">要解密的以Base64</param> /// <param name="sKey">密钥,且必须为8位</param> /// <returns>已解密的字符串</returns> public static string Decrypt(string text, string sKey) { if (text.Contains("Password"))//如果包含Password,表示没有加密 { return text; } //确信当前字符串,是加密字符串 if ((text.Length % 4) != 0)//因为加密后是base64,所以用4来求余进行验证 { return text; } byte[] inputByteArray = Convert.FromBase64String(text); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); 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.UTF8.GetString(ms.ToArray()); } } #endregion #region 深度加密 /// <summary> /// 深度加密 /// </summary> /// <param name="pToEncrypt">要加密的字符串</param> /// <param name="sKey">密钥,且必须8位</param> /// <returns>以Base64格式返回的深度加密字符串</returns> public static string DepthEncrypt(string pToEncrypt, string sKey) { //一级加密 string yetEncryStr = Encrypt(pToEncrypt, sKey); //二级加密 string secondEncryStr = Regex.Replace(yetEncryStr, SourceStr, ReplaceStr); return secondEncryStr; } /// <summary> /// 深度加密 /// </summary> /// <param name="pToEncrypt">要加密的字符串</param> /// <returns>以Base64格式返回的深度加密字符串</returns> public static string DepthEncrypt(string pToEncrypt) { //一级加密 string yetEncryStr = Encrypt(pToEncrypt, StrKey); //二级加密 string secondEncryStr = Regex.Replace(yetEncryStr, SourceStr, ReplaceStr); return secondEncryStr; } #endregion #region 深度解密 /// <summary> /// 深度解密 /// </summary> /// <param name="pToDecrypt">要解密的以Base64</param> /// <param name="sKey">密钥,且必须8位</param> /// <returns>已解密的字符串</returns> public static string DepthDecrypt(string pToDecrypt, string sKey) { //对原加密字符串,作特殊字符替换(一级解密) string secondDecryptStr = Regex.Replace(pToDecrypt, ReplaceStr, SourceStr); //二级解密 var yetDecrytString = Decrypt(secondDecryptStr, sKey); return yetDecrytString; } /// <summary> /// 深度解密 /// </summary> /// <param name="pToDecrypt">要解密的以Base64</param> /// <returns>已解密的字符串</returns> public static string DepthDecrypt(string pToDecrypt) { //对原加密字符串,作特殊字符替换(一级解密) string secondDecryptStr = Regex.Replace(pToDecrypt, ReplaceStr, SourceStr); //二级解密 var yetDecrytString = Decrypt(secondDecryptStr, StrKey); return yetDecrytString; } #endregion } }
FrmEncrypt.cs
using System; using System.Configuration; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; namespace UBT.Encrypt.Tools { public partial class FrmEncrypt : Form { public FrmEncrypt() { InitializeComponent(); var longDate = DateTime.Now.ToLongDateString(); var longTime = DateTime.Now.ToLongTimeString(); var formatDate = DateTime.Now.ToString("yyyyMMddHHmmssffff"); } /// <summary> /// 生成密钥 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { string unEncryStr = this.txtUnEncryStr.Text.Trim(); if (unEncryStr == "") { MessageBox.Show("请输入待加密的字符串!"); return; } //深度加密 var secondEncryStr = DESEncrypt.DepthEncrypt(unEncryStr); this.txtEncryStr.Text = secondEncryStr; } /// <summary> /// 解密 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDecrypt_Click(object sender, EventArgs e) { var str = txtEncryStr.Text; var yetDecrytString = DESEncrypt.DepthDecrypt(str); txtDecryptStr.Text = yetDecrytString; } } }