• 通用类 DES 字符加解密


    /// <summary>
            /// 加解密密钥
            /// </summary>
            public static string DesKey
            {
                get
                {
                    try
                    {
                        return ConfigurationManager.AppSettings["DESKey"].ToString();
                    }
                    catch
                    {
                        Logger.Write("读取DES密钥错误", Logger.MsgType.Error);
                        return string.Empty;
                    }
                }
            }
    
            /// <summary>
            /// 加密方法  
            /// </summary>
            /// <param name="encryptString">待加密字符</param>
            /// <returns></returns>
            public static string Encrypt(string encryptString)
            {
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    //把字符串放到byte数组中  
                    //原来使用的UTF8编码,我改成Unicode编码了,不行  
                    byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);
                    //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);  
                    //建立加密对象的密钥和偏移量  
                    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
                    //使得输入密码必须输入英文文本  
                    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(DesKey, "md5").Substring(0, 8));
                    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(DesKey, "md5").Substring(0, 8));
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            //Write  the  byte  array  into  the  crypto  stream  
                            //(It  will  end  up  in  the  memory  stream)  
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                        }
                        //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
                        StringBuilder ret = new StringBuilder();
                        Array.ForEach(ms.ToArray(),
                        delegate(byte b)
                        {
                            //Format  as  hex  
                            ret.AppendFormat("{0:X2}", b);
                        });
                        ret.ToString();
                        return ret.ToString();
                    }
                }
            }
    
    
            /// <summary>
            /// 加密方法  
            /// </summary>
            /// <param name="encryptString">待加密字符</param>
            /// <param name="key">密钥</param>
            /// <returns></returns>
            public static string Encrypt(string encryptString,string key)
            {
                using(DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    //把字符串放到byte数组中  
                    //原来使用的UTF8编码,我改成Unicode编码了,不行  
                    byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);
                    //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);  
                    //建立加密对象的密钥和偏移量  
                    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
                    //使得输入密码必须输入英文文本  
                    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(0, 8));
                    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(0, 8));
                    using(MemoryStream ms = new MemoryStream())
                    {
                        using(CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            //Write  the  byte  array  into  the  crypto  stream  
                            //(It  will  end  up  in  the  memory  stream)  
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                        }
                        //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
                        StringBuilder ret = new StringBuilder();
                        Array.ForEach(ms.ToArray(),
                        delegate(byte b)
                        {
                            //Format  as  hex  
                            ret.AppendFormat("{0:X2}", b);
                        });
                        ret.ToString();
                        return ret.ToString();
                    }
                }
            }
    
            /// <summary>
            /// 解密方法  
            /// </summary>
            /// <param name="decryptString">待解密字符</param> 
            /// <param name="key">密钥</param>
            /// <returns></returns>
            public static string Decrypt(string decryptString,string key)
            {
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    //Put  the  input  string  into  the  byte  array  
                    byte[] inputByteArray = new byte[decryptString.Length / 2];
                    for (int x = 0; x < decryptString.Length / 2; x++)
                    {
                        int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
                        inputByteArray[x] = (byte)i;
                    }
                    //建立加密对象的密钥和偏移量,此值重要,不能修改  
                    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(0, 8));
                    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(0, 8));
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                        {
                            //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                        }
                        //Get  the  decrypted  data  back  from  the  memory  stream                      
                        return Encoding.Default.GetString(ms.ToArray());
                    }
                }
            }
    
    
            /// <summary>
            /// 解密方法  
            /// </summary>
            /// <param name="decryptString">待解密字符</param> 
            /// <returns></returns>
            public static string Decrypt(string decryptString)
            {
                using(DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    //Put  the  input  string  into  the  byte  array  
                    byte[] inputByteArray = new byte[decryptString.Length / 2];
                    for(int x = 0; x < decryptString.Length / 2; x++)
                    {
                        int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
                        inputByteArray[x] = (byte)i;
                    }
                    //建立加密对象的密钥和偏移量,此值重要,不能修改  
                    des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(DesKey, "md5").Substring(0, 8));
                    des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(DesKey, "md5").Substring(0, 8));
                    using(MemoryStream ms = new MemoryStream())
                    {
                        using(CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                        {
                            //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                        }
                        //Get  the  decrypted  data  back  from  the  memory  stream                      
                        return Encoding.Default.GetString(ms.ToArray());
                    }
                }
            }  
        }
    
  • 相关阅读:
    Silverlight DataGrid 获取 Row 左键双击事件
    数据结果集拼接到一行
    程序“[6040] iisexpress.exe”已退出,返回值为 0 (0x0)。
    新手用WPF山寨QQ管家7.6(二)
    风向十六方位图和温度湿度图
    新手向使用XAML画出Win8风格图标的照相机,小姐你相机~~
    新手用WPF山寨QQ管家7.6(一)
    实验一
    实验5
    实验4
  • 原文地址:https://www.cnblogs.com/acyy/p/2662167.html
Copyright © 2020-2023  润新知