zoukankan      html  css  js  c++  java
  • 加密应用场景

    目前自己接触的加密场景

    • 连接字符串里面加密
    • 用户表里面的密码加密

    先总结一下这两种场景加密的差异和区别吧。连接字符串的加密根据项目的不同有的只是加密数据库连接的密码进行加密,有的是对整个字符串进行加密。只是为了在配置文件的里面的字符串让人看不懂。但是到了创建连接对象的时候还得把那一串看不懂的字符串转换成连接字符串。

    用户表里面的密码,这个就不要解密、也不能解密。

    好了根据这两个需求就可以写出一个简单的加密工具类

    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class SecretUtil
        {
            private static SymmetricAlgorithm mobjCryptoService;
            private static string Key;
    
            public SecretUtil() {
                mobjCryptoService = new RijndaelManaged();
                Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUdpyang76*h%(HilJ$lhj!y6&(*jkP87jH7"; 
            }
    
            /// 获得密钥    
            /// </summary>    
            /// <returns>密钥</returns>    
            private static byte[] GetLegalKey()
            {
                string sTemp = Key;
                mobjCryptoService.GenerateKey();
                byte[] bytTemp = mobjCryptoService.Key;
                int KeyLength = bytTemp.Length;
                if (sTemp.Length > KeyLength)
                    sTemp = sTemp.Substring(0, KeyLength);
                else if (sTemp.Length < KeyLength)
                    sTemp = sTemp.PadRight(KeyLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary>    
            /// 获得初始向量IV    
            /// </summary>    
            /// <returns>初试向量IV</returns>    
            private static byte[] GetLegalIV()
            {
                string sTemp = "E4ghj*Ghg7!rNIfb&95GdpyangUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
                mobjCryptoService.GenerateIV();
                byte[] bytTemp = mobjCryptoService.IV;
                int IVLength = bytTemp.Length;
                if (sTemp.Length > IVLength)
                    sTemp = sTemp.Substring(0, IVLength);
                else if (sTemp.Length < IVLength)
                    sTemp = sTemp.PadRight(IVLength, ' ');
                return ASCIIEncoding.ASCII.GetBytes(sTemp);
            }
            /// <summary>    
            /// 加密方法    
            /// </summary>    
            /// <param name="Source">待加密的串</param>    
            /// <returns>经过加密的串</returns>    
            public static string Encrypto(string Source)
            {
                byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
                MemoryStream ms = new MemoryStream();
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
                cs.Write(bytIn, 0, bytIn.Length);
                cs.FlushFinalBlock();
                ms.Close();
                byte[] bytOut = ms.ToArray();
                return Convert.ToBase64String(bytOut);
            }
    
            /// <summary>
            /// MD5不可逆加密 
            /// 32位加密
            /// </summary>
            /// <param name="s"></param>
            /// <param name="_input_charset"></param>
            /// <returns></returns>
            public static string EncryptoMd5(string s, string _input_charset)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
                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();
            }
    
            /// <summary>    
            /// 解密方法    
            /// </summary>    
            /// <param name="Source">待解密的串</param>    
            /// <returns>经过解密的串</returns>    
            public static string Decrypto(string Source)
            {
                byte[] bytIn = Convert.FromBase64String(Source);
                MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
                mobjCryptoService.Key = GetLegalKey();
                mobjCryptoService.IV = GetLegalIV();
                ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
                StreamReader sr = new StreamReader(cs);
                return sr.ReadToEnd();
            }
    
            
        }
    }
  • 相关阅读:
    Spring(4)——面向切面编程(AOP模块)
    Spring(3)——装配 Spring Bean 详解
    Spring(2)——Spring IoC 详解
    Spring学习(1)——快速入门
    彼得原理(The Peter Principle)
    默菲定律 [Murphy's Law]
    EXTJS 表单提交
    在java 中,数组与 List<T> 类型的相互转换
    Eclipse 工作目录被破坏,导致Eclipse 打不开
    EXTJS 密码确认与验证
  • 原文地址:https://www.cnblogs.com/Dtscal/p/4891511.html
Copyright © 2011-2022 走看看