zoukankan      html  css  js  c++  java
  • 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;
            }
    
    
    
    
        }
    }
  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/Jeely/p/11718626.html
Copyright © 2011-2022 走看看