东哥的博客

我的学习笔记!

导航

字符串的加密与解密(一)

Posted on 2015-07-21 22:48  Donge  阅读(475)  评论(2)    收藏  举报

    前段时间自己琢磨着写个给字符串加密和解密的小程序,在网上找了一些代码,稍做整理,记录如下:

    一、不可逆加密

    1、MD5

    (之前一直以为经过MD5加密是不可逆的,今天在网上竟然找到个网址可以解密,试了一下,真的可以哦!)

        /// <summary>
        /// 使用MD5加密字符串
        /// </summary>
        /// <param name="source">待加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        private static string MD5Encrypt(string source)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            try
            {
                byte[] t = md5.ComputeHash(Encoding.ASCII.GetBytes(source));
                StringBuilder sb = new StringBuilder(32);
                for (int i = 0; i < t.Length; i++)
                {
                    sb.Append(t[i].ToString("x").PadLeft(2, '0'));
                }
                return sb.ToString().ToUpper();
            }
            catch (CryptographicException ex) { throw ex; }
            catch (Exception ex) { throw ex; }
            finally
            {
                md5.Clear();
            }
        }

    2、SHA1

        /// <summary>
        /// 使用SHA1算法加密字符串
        /// </summary>
        /// <param name="source">待加密的字符串</param>
        /// <returns>加密后的字符串</returns>
        private static string SHA1Encrypt(string source)
        {
            SHA1 sha1 = new SHA1CryptoServiceProvider();
            try
            {
                byte[] t = Encoding.ASCII.GetBytes(source);
                byte[] s = sha1.ComputeHash(t);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < s.Length; i++)
                {
                    sb.Append(s[i].ToString("x").PadLeft(2, '0'));
                }
                return sb.ToString().ToUpper() ;
            }

            catch (CryptographicException ex) { throw ex; }
            catch (Exception ex) { throw ex; }
            finally
            {
                sha1.Clear();
            }
        }

    运行结果如下:

    image