zoukankan      html  css  js  c++  java
  • 通用类 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());
                    }
                }
            }  
        }
    
  • 相关阅读:
    深入理解java垃圾回收算法
    JVM类加载机制与对象的生命周期
    JVM 类加载机制详解
    从经典面试题看java中类的加载机制
    Intellij IDEA常用快捷键介绍 Intellij IDEA快捷键大全汇总
    Java HashMap 如何正确遍历并删除元素
    记录Java的垃圾回收机制和几种引用
    浅谈jvm中的垃圾回收策略
    Mysql常见四种索引的使用
    Java虚拟机垃圾回收(三) 7种垃圾收集器
  • 原文地址:https://www.cnblogs.com/acyy/p/2662167.html
Copyright © 2011-2022 走看看