ASP.NET----DES暗号化/復号化クラス

7318 ワード

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

}


データベースに書き込むログイン時にpasswordを暗号化できます!データにパスワードを表示すると暗号化された文字になります!もちろんこのような解読機能も備えています!直接呼び出すだけでいい