控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

ASP.NET----DES加密/解密类

作者:佚名 出处:互联网 2011年08月23日 阅读:

ASP.NET----DES加密/解密类

view sourceprint?using System; 

using System.Security.Cryptography;   

using System.Text; 

using System.IO; 

  

/// <summary> 

/// DES加密/解密类。 

/// </summary> 

public class DESEncrypt 

    public DESEncrypt() 

    { 

    } 

  

    #region ========加密======== 

  

    /// <summary> 

    /// 加密 

    /// </summary> 

    /// <param name="Text"></param> 

    /// <returns></returns> 

    public static string Encrypt(string Text) 

    { 

        return Encrypt(Text, "HarryJames"); 

    } 

    /// <summary>  

    /// 加密数据  

    /// </summary>  

    /// <param name="Text"></param>  

    /// <param name="sKey"></param>  

    /// <returns></returns>  

    public static string Encrypt(string Text, string sKey) 

    { 

        DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 

        byte[] inputByteArray; 

        inputByteArray = Encoding.Default.GetBytes(Text); 

        des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8)); 

        des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8)); 

        System.IO.MemoryStream ms = new System.IO.MemoryStream(); 

        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); 

        cs.Write(inputByteArray, 0, inputByteArray.Length); 

        cs.FlushFinalBlock(); 

        StringBuilder ret = new StringBuilder(); 

        foreach (byte b in ms.ToArray()) 

        { 

            ret.AppendFormat("{0:X2}", b); 

        } 

        return ret.ToString(); 

    } 

  

    #endregion 

  

    #region ========解密======== 

  

  

    /// <summary> 

    /// 解密 

    /// </summary> 

    /// <param name="Text"></param> 

    /// <returns></returns> 

    public static string Decrypt(string Text) 

    { 

        return Decrypt(Text, "HarryJames"); 

    } 

    /// <summary>  

    /// 解密数据  

    /// </summary>  

    /// <param name="Text"></param>  

    /// <param name="sKey"></param>  

    /// <returns></returns>  

    public static string Decrypt(string Text, string sKey) 

    { 

        DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 

        int len; 

        len = Text.Length / 2; 

        byte[] inputByteArray = new byte[len]; 

        int x, i; 

        for (x = 0; x < len; x++) 

        { 

            i = Convert.ToInt32(Text.Substring(x * 2, 2), 16); 

            inputByteArray[x] = (byte)i; 

        } 

        des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8)); 

        des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8)); 

        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.Default.GetString(ms.ToArray()); 

    } 

  

    #endregion 

  

public class DESEncryptEx 

    #region ========加密======== 

    /// <summary> 

    /// 加密字符串 

    /// </summary> 

    /// <param name="pToEncrypt">待加密字符串</param> 

    /// <returns></returns> 

    public static string Encrypt(string pToEncrypt) 

    { 

        byte[] desKey = new byte[] { 0x16, 0x29, 0x98, 0x15, 0x07, 0x08, 0x05, 0x03 }; 

        byte[] desIV = new byte[] { 0x16, 0x09, 0x14, 0x15, 0x07, 0x08, 0x05, 0x03 }; 

  

        DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 

        try

        { 

            //把字符串放到byte数组中 

            //原来使用的UTF8编码,改成Unicode编码了,不行 

            byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); 

            //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); 

  

            //建立加密对象的密钥和偏移量 

            //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 

            //使得输入密码必须输入英文文本 

            des.Key = desKey;       // ASCIIEncoding.ASCII.GetBytes(sKey); 

            des.IV = desIV;         //ASCIIEncoding.ASCII.GetBytes(sKey); 

            MemoryStream ms = new MemoryStream(); 

            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(); 

            foreach (byte b in ms.ToArray()) 

            { 

                //Format as hex 

                ret.AppendFormat("{0:X2}", b); 

            } 

            ret.ToString(); 

            return ret.ToString(); 

        } 

        catch

        { 

            return pToEncrypt; 

        } 

        finally

        { 

            des = null; 

        } 

    } 

    #endregion 

  

    #region ========解密======== 

    /// <summary> 

    /// 解密字符串 

    /// </summary> 

    /// <param name="pToDecrypt">待解密字符串</param> 

    /// <returns></returns> 

    public static string Decrypt(string pToDecrypt) 

    { 

        byte[] desKey = new byte[] { 0x16, 0x29, 0x98, 0x15, 0x07, 0x08, 0x05, 0x03 }; 

        byte[] desIV = new byte[] { 0x16, 0x09, 0x14, 0x15, 0x07, 0x08, 0x05, 0x03 }; 

  

        DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 

        try

        { 

            //Put the input string into the byte array 

            byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; 

            for (int x = 0; x < pToDecrypt.Length / 2; x++) 

            { 

                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); 

                inputByteArray[x] = (byte)i; 

            } 

  

            //建立加密对象的密钥和偏移量,此值重要,不能修改 

            des.Key = desKey;           //ASCIIEncoding.ASCII.GetBytes(sKey); 

            des.IV = desIV;             //ASCIIEncoding.ASCII.GetBytes(sKey); 

            MemoryStream ms = new MemoryStream(); 

            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 

            //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 

            StringBuilder ret = new StringBuilder(); 

  

            return System.Text.Encoding.Default.GetString(ms.ToArray()); 

        } 

        catch

        { 

            return pToDecrypt; 

        } 

        finally

        { 

            des = null; 

        } 

    } 

  

    #endregion 

}

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统