zoukankan      html  css  js  c++  java
  • 加密解密

    //======================================================================
    //  使用DES(数据加密算法)对数据进行加密/解密的类
    //====================================================================== 
    
    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace Encrypt
    {
        /// <summary>
        /// 使用DES(数据加密算法)对数据进行加密/解密的类
        /// </summary>
        public sealed class DES
        {
            /// <summary>
            /// 加密密钥
            /// </summary>
            public static readonly string SECRET = "L82V6ZVD6J";
            public static readonly string WIRELESSSECRET = "JP248ADS0H";
            
            //public static readonly string SECRET = "0123456789";
            //默认密钥向量
            private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
            /// <summary>
            /// DES加密字符串
            /// </summary>
            /// <param name="encryptString">待加密的字符串</param>
            /// <param name="encryptKey">加密密钥,要求为8位</param>
            /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
            public static string Encode(string encryptString, string encryptKey)
            {
                encryptKey = GetSubString(encryptKey, 8, "");
                encryptKey = encryptKey.PadRight(8, ' ');
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
    
            /// <summary>
            /// DES解密字符串
            /// </summary>
            /// <param name="decryptString">待解密的字符串</param>
            /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
            /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
            public static string Decode(string decryptString, string decryptKey)
            {
                try
                {
                    decryptKey = GetSubString(decryptKey,0, 8, "");
                    decryptKey = decryptKey.PadRight(8, ' ');
                    byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                    byte[] rgbIV = Keys;
                    byte[] inputByteArray = Convert.FromBase64String(decryptString);
                    DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
    
                    MemoryStream mStream = new MemoryStream();
                    CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                    cStream.Write(inputByteArray, 0, inputByteArray.Length);
                    cStream.FlushFinalBlock();
                    return Encoding.UTF8.GetString(mStream.ToArray());
                }
                catch
                {
                    return "";
                }
    
            }
    
            #region 截取字符串函数
    
            /// <summary>
            /// 截取字符串函数
            /// </summary>
            /// <param name="Str">所要截取的字符串</param>
            /// <param name="Num">截取字符串的长度</param>
            /// <returns></returns>
            public static string GetSubString(string Str, int Num)
            {
                if (Str == null || Str == "")
                {
                    return "";
                }
                string outstr = string.Empty;
                int n = 0;
                foreach (char ch in Str)
                {
                    n += System.Text.Encoding.Default.GetByteCount(ch.ToString());
    
                    if (n > Num)
                    {
                        break;
                    }
                    else
                    {
                        outstr += ch;
                    }
                }
    
                return outstr;
            }
            /// <summary>
            /// 截取字符串函数,如果超过指定长度则将超出的部分用指定字符串代替
            /// </summary>
            /// <param name="Str">所要截取的字符串</param>
            /// <param name="Num">截取字符串的长度</param>
            /// <param name="Num">截取字符串后省略部分的字符串</param>
            /// <returns></returns>
            public static string GetSubString(string Str, int Num, string LastStr)
            {
                return GetSubString(Str, 0, Num, LastStr);
            }
    
            #endregion
    
            #region 截取字符串,超过部分用指定字符串替换
    
            /* 宗波于 2010-6-12 日添加, 来源于DiscuzNt */
            /// <summary>
            /// 取指定长度的字符串
            /// </summary>
            /// <param name="p_SrcString">要检查的字符串</param>
            /// <param name="p_StartIndex">起始位置</param>
            /// <param name="p_Length">指定长度</param>
            /// <param name="p_TailString">用于替换的字符串</param>
            /// <returns>截取后的字符串</returns>
            public static string GetSubString(string p_SrcString, int p_StartIndex, int p_Length, string p_TailString)
            {
                string myResult = p_SrcString;
    
                Byte[] bComments = Encoding.UTF8.GetBytes(p_SrcString);
                foreach (char c in Encoding.UTF8.GetChars(bComments))
                {    //当是日文或韩文时(注:中文的范围:u4e00 - u9fa5, 日文在u0800 - u4e00, 韩文为xAC00-xD7A3)
                    if ((c > 'u0800' && c < 'u4e00') || (c > 'xAC00' && c < 'xD7A3'))
                    {
                        //if (System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[u0800-u4e00]+") || System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[xAC00-xD7A3]+"))
                        //当截取的起始位置超出字段串长度时
                        if (p_StartIndex >= p_SrcString.Length)
                            return "";
                        else
                            return p_SrcString.Substring(p_StartIndex,
                                                           ((p_Length + p_StartIndex) > p_SrcString.Length) ? (p_SrcString.Length - p_StartIndex) : p_Length);
                    }
                }
    
                if (p_Length >= 0)
                {
                    byte[] bsSrcString = Encoding.Default.GetBytes(p_SrcString);
    
                    //当字符串长度大于起始位置
                    if (bsSrcString.Length > p_StartIndex)
                    {
                        int p_EndIndex = bsSrcString.Length;
    
                        //当要截取的长度在字符串的有效长度范围内
                        if (bsSrcString.Length > (p_StartIndex + p_Length))
                        {
                            p_EndIndex = p_Length + p_StartIndex;
                        }
                        else
                        {   //当不在有效范围内时,只取到字符串的结尾
    
                            p_Length = bsSrcString.Length - p_StartIndex;
                            p_TailString = "";
                        }
    
                        int nRealLength = p_Length;
                        int[] anResultFlag = new int[p_Length];
                        byte[] bsResult = null;
    
                        int nFlag = 0;
                        for (int i = p_StartIndex; i < p_EndIndex; i++)
                        {
                            if (bsSrcString[i] > 127)
                            {
                                nFlag++;
                                if (nFlag == 3)
                                    nFlag = 1;
                            }
                            else
                                nFlag = 0;
    
                            anResultFlag[i] = nFlag;
                        }
    
                        if ((bsSrcString[p_EndIndex - 1] > 127) && (anResultFlag[p_Length - 1] == 1))
                            nRealLength = p_Length + 1;
    
                        bsResult = new byte[nRealLength];
    
                        Array.Copy(bsSrcString, p_StartIndex, bsResult, 0, nRealLength);
    
                        myResult = Encoding.Default.GetString(bsResult);
                        myResult = myResult + p_TailString;
                    }
                }
    
                return myResult;
            }
    
    
            #endregion
    
        }
    }
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Web;
    
    namespace Encrypt
    {
        public partial class Main : Form
        {
            
            public Main()
            {
                InitializeComponent();
                Sunisoft.IrisSkin.SkinEngine se = new Sunisoft.IrisSkin.SkinEngine();
                se.SkinAllForm = true;//所有窗体应用此皮肤
                se.SkinFile = @"....skinMSN.ssk";
            }
    
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void EncryptBtn_Click(object sender, EventArgs e)
            {
                if (!string.IsNullOrWhiteSpace(UnEncrypttxt.Text.Trim()))
                {
                    Encrypttxt.Text = HttpUtility.UrlEncode(DES.Encode(UnEncrypttxt.Text.Trim(), DES.SECRET), Encoding.UTF8);
                }
                else
                {
                    MessageBox.Show("请输入待加密字符串!");
                }
    
            }
    
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void UnEncryptBtn_Click(object sender, EventArgs e)
            {
                if (!string.IsNullOrWhiteSpace(Encrypttxt.Text.Trim()))
                {
                    UnEncrypttxt.Text = DES.Decode(HttpUtility.UrlDecode(Encrypttxt.Text.Trim(), Encoding.UTF8), DES.SECRET);
                }
                else
                {
                    MessageBox.Show("请输入待解密字符串!");
                }
            }
    
            /// <summary>
            /// 生成cookie
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void cookieBtn_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrWhiteSpace(UnEncrypttxt.Text.Trim()))
                {
                    MessageBox.Show("请输入待加密字符串!");
                    return;
                }
                if (string.IsNullOrWhiteSpace(openidTxt.Text.Trim()))
                {
                    MessageBox.Show("请输入openid!");
                    return;
                }
                cookieTxt.Text = string.Format("CooperateUserId={0}&openid={0}&MemberId={1}&MemberSysId=33", openidTxt.Text.Trim(), HttpUtility.UrlEncode(DES.Encode(UnEncrypttxt.Text.Trim(), DES.SECRET), Encoding.UTF8));
            }
    
        }
    }
  • 相关阅读:
    vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
    GitLab 项目
    pythonWeb开发
    $(function(){})里面不能定义函数
    elementUI el-cascader回显问题
    elementUI 弹框嵌套蒙层问题
    JS获取浏览器信息及屏幕分辨率
    mockjs导致element-ui upload组件的on-progress和axios的responseType失效
    vue中记录页面的滚动距离
    vue组件的inheritAttrs属性
  • 原文地址:https://www.cnblogs.com/Jeely/p/11721196.html
Copyright © 2011-2022 走看看