zoukankan      html  css  js  c++  java
  • 【.NET】加密和解密(.NET)

    类名:Security

    using System;
    using System.Security.Cryptography;
    using System.IO;
    using System.Text;
    
    namespace Tools
    {
        ///
        /// Security 的摘要说明。
        /// Security类实现.NET框架下的加密和解密。
        /// CopyRight [email]KangSoft@Hotmail.com[/email]@[email]Hotmail.com@hotmail.com[/email]
        ///
        public class Security
        {
            string _QueryStringKey = "abcdefgh"; //URL传输参数加密Key
            string _PassWordKey = "hgfedcba"; //PassWord加密Key
    
            public Security()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
    
            ///
            /// 加密URL传输的字符串
            ///
            public string EncryptQueryString(string QueryString)
            {
                return Encrypt(QueryString, _QueryStringKey);
            }
    
            ///
            /// 解密URL传输的字符串
            ///
            public string DecryptQueryString(string QueryString)
            {
                return Decrypt(QueryString, _QueryStringKey);
            }
    
            ///
            /// 加密帐号口令
            ///
            public string EncryptPassWord(string PassWord)
            {
                return Encrypt(PassWord, _PassWordKey);
            }
    
            ///
            /// 解密帐号口令
            ///
            public string DecryptPassWord(string PassWord)
            {
                return Decrypt(PassWord, _PassWordKey);
            }
    
            ///
            /// DEC 加密过程
            ///
            public string Encrypt(string pToEncrypt, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中
    
                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
                //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
    
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
                MemoryStream ms = new 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);
                }
                ret.ToString();
                return ret.ToString();
            }
    
            ///
            /// DEC 解密过程
            ///
            public string Decrypt(string pToDecrypt, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    
                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 = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
    
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
    
                StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
    
                return System.Text.Encoding.Default.GetString(ms.ToArray());
            }
    
            ///
            /// 检查己加密的字符串是否与原文相同
            ///
            public bool ValidateString(string EnString, string FoString, int Mode)
            {
                switch (Mode)
                {
                    default:
                    case 1:
                        if (Decrypt(EnString, _QueryStringKey) == FoString.ToString())
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    case 2:
                        if (Decrypt(EnString, _PassWordKey) == FoString.ToString())
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                }
            }
        }
    }
  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/chencsblog/p/3289090.html
Copyright © 2011-2022 走看看