软件开发框架密码加密助手类

在web软件开发框架实施项目里,经常会碰到数据加密的应用场景,比如说登陆、网络传输等,这些场景的面对放在太阳下暴晒的数据我们该怎么办?

软件开发框架加密

直接贴源码了,主要是使用md5和3des加解密字符串,字符串再经过base64编码,比较简单。

/// <summary>
    /// 密码加密助手类
    /// </summary>
    public static class EncrpytHelper
    {
        //软件开发框架md5加密
        internal static byte[] GetHash(string key)
        {
            using (MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider())
            {
                return hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
            }
        }
        private static byte[] _DefaultHashKey;
        internal static byte[] DefaultHashKey
        {
            get
            {
                if (_DefaultHashKey == null)
                {
                    _DefaultHashKey = GetHash("!1@2#3$4%5^6");
                }
                return _DefaultHashKey;
            }
        }
        /// <summary>
        /// 预留的二次加密
        /// </summary>
        internal static string EncrpytKey
        {
            get
            {
                return AppConfig.GetApp("EncrpytKey", "");
            }
        }
        #region
        public static string Encrypt(string text)
        {
            string result = Encrypt(text, DefaultHashKey);
            if (EncrpytKey != "")
            {
                result = Encrypt(result, GetHash(EncrpytKey)) + "=2";//设置二级加密标识
            }
            return result;
        }
        /// <summary>
        /// 软件开发框架3des加密字符串
        /// </summary>
        /// <param name="text">要加密的字符串</param>
        /// <param name="hashKey">密钥</param>
        /// <returns>加密后并经base64编码的字符串</returns>
        /// <remarks>静态方法,采用默认ascii编码</remarks>
        private static string Encrypt(string text, byte[] hashKey)
        {
            string result = string.Empty;
            using (TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider())
            {
                DES.Key = hashKey;
                DES.Mode = CipherMode.ECB;
                ICryptoTransform DESEncrypt = DES.CreateEncryptor();

                byte[] Buffer = ASCIIEncoding.UTF8.GetBytes(text);
                string pass = Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
                result = pass.Replace('=', '#');
            }

            return result;
        }//end method


        /// <summary>
        /// 软件开发框架3des解密字符串
        /// </summary>
        /// <param name="text">要解密的字符串</param>
        /// <returns>解密后的字符串</returns>
        /// <exception cref="">密钥错误</exception>
        /// <remarks>静态方法,采用默认ascii编码</remarks>
        public static string Decrypt(string text)
        {
            return Decrypt(text, true);
        }//end method

        internal static string Decrypt(string text, bool isStrict)
        {
            if (string.IsNullOrEmpty(text))
            {
                return string.Empty;
            }
            else
            {
                text = text.Trim().Replace(' ', '+');//处理Request的+号变空格问题。
                if (EncrpytKey != "" && (isStrict || text.EndsWith("=2")))
                {
                    text = Decrypt(text.Substring(0, text.Length - 2), GetHash(EncrpytKey));//先解一次Key
                }
                return Decrypt(text, DefaultHashKey);
            }
        }
        /// <summary>
        /// 软件开发框架3des解密字符串
        /// </summary>
        /// <param name="text">要解密的字符串</param>
        /// <param name="key">密钥</param>
        /// <returns>解密后的字符串</returns>
        /// <exception cref="">密钥错误</exception>
        /// <remarks>静态方法,采用默认ascii编码</remarks>
        private static string Decrypt(string text, byte[] hashKey)
        {
            string result = "";
            text = text.Replace('#', '=');
            using (TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider())
            {
                DES.Key = hashKey;
                DES.Mode = CipherMode.ECB;

                ICryptoTransform DESDecrypt = DES.CreateDecryptor();
                try
                {
                    byte[] Buffer = Convert.FromBase64String(text);
                    result = ASCIIEncoding.UTF8.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
                }
                catch
                {
                    return text;
                }
            }
            return result;
        }

        #endregion
    }

软件开发框架密码学

在web软件开发框架实施项目里,经常会碰到数据加密的应用场景,比如说登陆、网络传输等,这些场景的面对放在太阳下暴晒的数据我们该怎么办,这里我们提供一个密码加密助手类供大家在项目中参考。

网站&系统开发技术学习交流群:463167176

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:软件开发框架 » 软件开发框架密码加密助手类
本文标题:软件开发框架密码加密助手类
本文地址:http://www.hocode.com/OrgTec/Plugin/0020.html

相关文章: B/S开发框架Web安全问题及防范规范之弱口令

电话
电话 18718672256

扫一扫
二维码