• MD5加密的绵集


    using System;
    using System.Security;
    using System.Security.Cryptography;
    using System.Diagnostics;
    using System.Web;
    using System.Text;

    namespace Bigeagle.Util
    {
       
        /// <summary>
        /// 一个加密类
        /// <br>Author:  Bigeagle@163.net</br>
        /// <br>Date:    2001/09/25</br>
        /// <br>History: 2001/10/25 finished</br>
        /// </summary>
        /// <remarks>
        /// 封装常用的加密算法
        /// </remarks>
        public class Cryptography
        {
            /// <summary>
            /// 生成16位随机密码
            /// </summary>
            /// <returns></returns>
            public static string createpass()
            {
                int Ran, LengthNum = 16;
                string Createpass = "";
                for (int i = 1; i < LengthNum; i++)
                {
                    Random ram = new Random();
                    Ran = Convert.ToInt32(ram.NextDouble() * 2);
                    if (Ran == 0)
                    {
                        Ran = Convert.ToInt32(ram.NextDouble() * 25) + 97;
                        Createpass = Createpass + Convert.ToString(Convert.ToChar(Ran)).ToUpper();
                    }
                    else if (Ran == 1)
                    {
                        Ran = Convert.ToInt32(ram.NextDouble() * 9);
                        Createpass = Createpass + Ran;
                    }
                    else if (Ran == 2)
                    {
                        Ran = Convert.ToInt32(ram.NextDouble() * 25) + 97;
                        Createpass = Createpass + Convert.ToString(Convert.ToChar(Ran));
                    }
                }
                return Createpass;
            }
            static void Main(string[] args)
            {
                string s = Encrypt3DES("Study", "fonny");
               Console.WriteLine(s);
                Console.WriteLine(Decrypt3DES(s,"fonny"));
                Console.WriteLine(CalculateMD5Hash("Study"));
                Console.WriteLine(GetMD5("Study","gb2312"));
                Console.WriteLine(createpass());
            }

            /// <summary>
            /// md5加密指定字符串
            /// </summary>
            /// <param name="a_strValue">要加密的字符串</param>
            /// <returns>加密后的字符串</returns>
            public static string EncryptMD5String(string a_strValue)
            {
    #if DEBUG
                Debug.Assert(a_strValue.Trim() != "", "空字符串", "空字符串不需要加密");
    #endif//DEBUG

                //转换成bytearray
                Byte[] hba = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).
                            ComputeHash(StringToByteArray(a_strValue));

                return ByteArrayToString(hba);
            }

            /// <summary>
            /// md5(1)
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string CalculateMD5Hash(string input)
            {
                // step 1, calculate MD5 hash from input
                MD5 md5 = System.Security.Cryptography.MD5.Create();
                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
                byte[] hash = md5.ComputeHash(inputBytes);

                // step 2, convert byte array to hex string
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("X2"));
                }
                return sb.ToString();

                //这个是C#中的,web中的FormsAuthentication.HashPasswordForStoringInConfigFile(字符串,"MD5")也可以实现

            }
            /// <summary>
            /// md5(2)
            /// </summary>
            /// <param name="s"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static string GetMD5(string s, string encoding)
            {
                System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] t = md5.ComputeHash(System.Text.Encoding.GetEncoding(encoding).GetBytes(s));
                System.Text.StringBuilder sb = new System.Text.StringBuilder(32);
                for (int i = 0; i < t.Length; i++)
                {
                    sb.Append(t[i].ToString("x").PadLeft(2, '0'));
                }
                return sb.ToString().ToLower();
            }


            /// <summary>
            /// 判断两个加密字符串是否相同
            /// </summary>
            /// <param name="a_str1"></param>
            /// <param name="a_str2"></param>
            /// <returns>如果相同返回真</returns>
            public static bool IsSame(string a_str1, string a_str2)
            {
                Byte[] b1 = StringToByteArray(a_str1);
                Byte[] b2 = StringToByteArray(a_str2);
                if (b1.Length != b2.Length)
                {
                    return false;
                }

                for (int i = 0; i < b1.Length; i++)
                {
                    if (b1[i] != b2[i])
                    {
                        return false;
                    }
                }

                return true;
            }

            /// <summary>
            /// 转换string到Byte树组
            /// </summary>
            /// <param name="s">要转换的字符串</param>
            /// <returns>转换的Byte数组</returns>
            public static Byte[] StringToByteArray(String s)
            {
                /*
                Char[] ca = s.ToCharArray();
                Byte[] ba = new Byte[ca.Length];
                for(int i=0; i<ba.Length; i++) ba[i] = (Byte)ca[i];
                return ba;*/

                return Encoding.UTF8.GetBytes(s);
            }

            /// <summary>
            /// 转换Byte数组到字符串
            /// </summary>
            /// <param name="a_arrByte">Byte数组</param>
            /// <returns>字符串</returns>
            public static string ByteArrayToString(Byte[] a_arrByte)
            {
                /*
                //char[] ca = new char[a_arrByte.Length] ;
                for(int i = 0 ; i < a_arrByte.Length ; i ++)
                {
                    result += (char)a_arrByte[i] ;
                }*/

                return Encoding.UTF8.GetString(a_arrByte);
            }


            /// <summary>
            /// 3des加密字符串
            /// </summary>
            /// <param name="a_strString">要加密的字符串</param>
            /// <param name="a_strKey">密钥</param>
            /// <returns>加密后并经base64编码的字符串</returns>
            /// <remarks>静态方法,采用默认ascii编码</remarks>
            public static string Encrypt3DES(string a_strString, string a_strKey)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

                DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
                DES.Mode = CipherMode.ECB;

                ICryptoTransform DESEncrypt = DES.CreateEncryptor();

                byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(a_strString);
                return Convert.ToBase64String(DESEncrypt.TransformFinalBlock
                    (Buffer, 0, Buffer.Length));
            }//end method

            /// <summary>
            /// 3des加密字符串
            /// </summary>
            /// <param name="a_strString">要加密的字符串</param>
            /// <param name="a_strKey">密钥</param>
            /// <param name="encoding">编码方式</param>
            /// <returns>加密后并经base63编码的字符串</returns>
            /// <remarks>重载,指定编码方式</remarks>
            public static string Encrypt3DES(string a_strString, string a_strKey, Encoding encoding)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

                DES.Key = hashMD5.ComputeHash(encoding.GetBytes(a_strKey));
                DES.Mode = CipherMode.ECB;

                ICryptoTransform DESEncrypt = DES.CreateEncryptor();

                byte[] Buffer = encoding.GetBytes(a_strString);
                return Convert.ToBase64String(DESEncrypt.TransformFinalBlock
                    (Buffer, 0, Buffer.Length));
            }


            /// <summary>
            /// 3des解密字符串
            /// </summary>
            /// <param name="a_strString">要解密的字符串</param>
            /// <param name="a_strKey">密钥</param>
            /// <returns>解密后的字符串</returns>
            /// <exception cref="">密钥错误</exception>
            /// <remarks>静态方法,采用默认ascii编码</remarks>
            public static string Decrypt3DES(string a_strString, string a_strKey)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

                DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(a_strKey));
                DES.Mode = CipherMode.ECB;

                ICryptoTransform DESDecrypt = DES.CreateDecryptor();

                string result = "";
                try
                {
                    byte[] Buffer = Convert.FromBase64String(a_strString);
                    result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock
                        (Buffer, 0, Buffer.Length));
                }
                catch (Exception e)
                {
    #if DEBUG
                    Console.WriteLine("错误:{0}", e);
    #endif//DEBUG
                    throw (new Exception("Invalid Key or input string is not a valid base64 string", e));
                }

                return result;
            }//end method

            /// <summary>
            /// 3des解密字符串
            /// </summary>
            /// <param name="a_strString">要解密的字符串</param>
            /// <param name="a_strKey">密钥</param>
            /// <param name="encoding">编码方式</param>
            /// <returns>解密后的字符串</returns>
            /// <exception cref="">密钥错误</exception>
            /// <remarks>静态方法,指定编码方式</remarks>
            public static string Decrypt3DES(string a_strString, string a_strKey, Encoding encoding)
            {
                TripleDESCryptoServiceProvider DES = new
                    TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

                DES.Key = hashMD5.ComputeHash(encoding.GetBytes(a_strKey));
                DES.Mode = CipherMode.ECB;

                ICryptoTransform DESDecrypt = DES.CreateDecryptor();

                string result = "";
                try
                {
                    byte[] Buffer = Convert.FromBase64String(a_strString);
                    result = encoding.GetString(DESDecrypt.TransformFinalBlock
                        (Buffer, 0, Buffer.Length));
                }
                catch (Exception e)
                {
    #if DEBUG
                    Console.WriteLine("错误:{0}", e);
    #endif//DEBUG
                    throw (new Exception("Invalid Key or input string is not a valid base64 string", e));
                }

                return result;
            }//end method


        }
    }

    这里和大家分享和学习如何学IT!
  • 相关阅读:
    机器学习——线性回归
    系统课程
    C++——数据结构之链表
    PHP检测json格式数据
    如何搭建git服务器
    ucenter通信实现同步登录、同步退出(详细)
    获取ip地址
    JQuery对象与DOM对象的区别与转换
    php导出数据到csv文件
    [转载]php中sleep,flush,ob_flush函数介绍
  • 原文地址:https://www.cnblogs.com/fuchifeng/p/1129282.html
Copyright © 2020-2023  润新知