程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .net DEC加密 與解密 是屬於對稱加密

.net DEC加密 與解密 是屬於對稱加密

編輯:.NET實例教程
using System;
  2using System.Security.Cryptography;
  3using System.IO;
  4using System.Text;
  5namespace Company.BLL
  6{
  7    /**//// <summary>
  8    /// 此類用來加密與解密存在於URL中的參數
  9    /// Create by sp
 10    /// </summary>
 11    public class IaskUrlEncode
 12    {
 13        public IaskUrlEncode()
 14        {
 15            //
 16            // TODO: 在此處添加構造函數邏輯
 17            //
 18        }
 19        string _QueryStringKey= "abcdefgh"; //URL傳輸參數加密Key
 20        string _PassWordKey = "hgfedcba";//PassWord加密Key
 21
 22        公共方法#region 公共方法
 23        /**//// <summary>
 24        /// 加密URL傳輸的字符串
 25        /// </summary>
 26        /// <param name="QueryString"></param>
 27        /// <returns></returns>
 28        public string EncryptQueryString(string QueryString)
 29        {
 30            return Encrypt(QueryString, _QueryStringKey);
 31        }
 32
 33
 34        /**//// <summary>
 35        /// 解密URL傳輸的字符串
 36        /// </summary>
 37        /// &name="QueryString"></param>
 38        /// <returns></returns>
 39        public string DecryptQueryString(string QueryString)
 40        {
 41            return Decrypt(QueryString, _QueryStringKey);
 42        }
 43
 44
 45        /**//// <summary>
 46        /// 加密帳號口令
 47        /// </summary>
 48        /// <param name="PassWord"></param>
 49        /// <returns></returns>
 50        private string EncryptPassWord(string PassWord)
 51        {
 52            return Encrypt(PassWord, _PassWordKey);
 53        }
 54
 55
 56        /**//// <summary>
 57        /// 解密帳號口令
 58        /// </summary>
 59        /// <param name="PassWord"></param>
 60        /// <returns></returns>
 61        private string DecryptPassWord(string PassWord)
 62        {
 63            return Decrypt(PassWord, _PassWordKey);
 64        }
 65        #endregion
 66
 67        加密過程#region 加密過程
 68        /**//// <summary>
 69        /// DEC 加密過程
 70        /// </summary>
 71        /// <param name="pToEncrypt"></param>
 72        /// <param name="sKey"></param>
 73        /// <returns></returns>
 74        private string Encrypt(string pToEncrypt, string sKey)
 75        {
 76            DESCryptoServiceProvider des = new DESCryptoServiceProvider();//把字符串放到byte數組中
 77
 78            byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
 79
 80            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);//建立加密對象的密鑰和偏移量
 81            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
 82            MemoryStream ms = new MemoryStream();//使得輸入密碼必須輸入英文文本
 83            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
 84
 85            cs.Write(inputByteArray, 0, inputByteArray.Length);
 86            cs.FlushFinalBlock();
 87
 88            StringBuilder ret = new StringBuilder();
 89            foreach (byte b in ms.ToArray())
 90            {
 91                ret.AppendFormat("{0:X2}", b);
 92            }
 93            ret.ToString();
 94            return ret.ToString();
 95        }
 96        #endregion
 97
 98        解密過程#region 解密過程
 99        /**//// <summary>
100        ///  DEC 解密過程
101        /// </summary>
102        /// <param name="pToDecrypt"></param>
103        /// <param name="sKey"></param>
104        /// <returns></returns>
105        private string Decrypt(string pToDecrypt, string sKey)
106        {
107            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
108
109            byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
110            for (int x = 0; x < pToDecrypt.Length / 2; x++)
111            {
112                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 113                inputByteArray[x] = (byte)i;
114            }
115
116            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);//建立加密對象的密鑰和偏移量,此值重要,不能修改
117            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
118            MemoryStream ms = new MemoryStream();
119            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
120
121            cs.Write(inputByteArray, 0, inputByteArray.Length);
122            cs.FlushFinalBlock();
123
124            StringBuilder ret = new StringBuilder();//建立StringBuilder對象,CreateDecrypt使用的是流對象,必須把解密後的文本變成流對象
125
126            return System.Text.Encoding.Default.GetString(ms.ToArray());
127        }
128        #endregion
129
130        匹配過程#region 匹配過程
131        /**//// <summary>
132        /// 檢查己加密的字符串是否與原文相同
133        /// </summary>
134        /// <param name="EnString"></param>
135        /// <param name="FoString"></param>
136        /// <param name="Mod
137        /// <returns></returns>
138        private bool ValidateString(string EnString, string FoString, int Mode)
139        {
140            switch (Mode)
141            {
142                default:
143                case 1:
144                    if (Decrypt(EnString, _QueryStringKey) == FoString.ToString())
145                    {
146                        return true;
147                    }
148                    else
149                    {
150                        return false;
151                    }
152                case 2:
153                    if (Decrypt(EnString, _PassWordKey) == FoString.ToString())
154                    {
155                        return true;
156                    }
157                    else
158                    {
159                        return false;
160                    }
161            }
162        }
163        #endregion
164    }
165
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved