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;
            }
    
    
    
    
        }
    }
  • 相关阅读:
    UBI系统原理分析【转】
    udhcpc命令【转】
    Device Tree(三):代码分析【转】
    Linux 中断详解 【转】
    ROS探索总结(三)——ROS新手教程【转】
    机器人操作系统(ROS)教程4:ROS的框架【转】
    你知道市面上机器人都用哪些操作系统吗【转】
    dump_stack调用过程【原创】
    #if、#ifdef、#if defined之间的区别【转】
    浅析firmware完整生存和使用流程 【转】
  • 原文地址:https://www.cnblogs.com/Jeely/p/11718626.html
Copyright © 2011-2022 走看看