ASP.NET -DEC通过密匙实现加密/解密

来源:互联网 发布:儿童权利公约知多少 编辑:程序博客网 时间:2024/06/05 10:05

ASP.NET -DEC通过密匙实现加密/解密 密钥(只支持8个字节的密钥)

 

  1. using System;
  2. using System.Configuration;
  3. using System.Collections;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.Text.RegularExpressions;
  11. using System.IO;
  12. using System.Security.Cryptography;
  13. using System.Text;
  14. public partial class _Default : System.Web.UI.Page
  15. {
  16.     protected void Page_Load(object sender, EventArgs e)
  17.     {
  18.         if (!this.IsPostBack)
  19.         {
  20.             //调用过程
  21.             string str = "www.baidu.com";//需要加密的数据
  22.             string enstr = this.Encrypt(str, "12345678");//调用加密方法 密钥只能8个字符
  23.             Response.Write(enstr);//输出加密后的数据
  24.             Response.Write("<br/>");//换行
  25.             string destr = this.Decrypt(enstr, "12345678");//调用解密方法 解刚才加密的数据 注意密钥要一样,否则解不出来,返回解密失败.
  26.             Response.Write(destr);//解密后的数据
  27.             //调用完毕
  28.         }
  29.     }
  30.         /// <summary>
  31.         /// DEC 加密过程
  32.         /// </summary>
  33.         /// <param name="pToEncrypt">被加密的字符串</param>
  34.         /// <param name="sKey">密钥(只支持8个字节的密钥)</param>
  35.         /// <returns>加密后的字符串</returns>
  36.         public string Encrypt(string pToEncrypt, string sKey)
  37.         {
  38.             //访问数据加密标准(DES)算法的加密服务提供程序 (CSP) 版本的包装对象
  39.             DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
  40.             des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量
  41.             des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
  42.             
  43.             byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);//把字符串放到byte数组中
  44.             MemoryStream ms = new MemoryStream();//创建其支持存储区为内存的流 
  45.             //定义将数据流链接到加密转换的流
  46.             CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
  47.             cs.Write(inputByteArray, 0, inputByteArray.Length);
  48.             cs.FlushFinalBlock();
  49.             //上面已经完成了把加密后的结果放到内存中去
  50.             StringBuilder ret = new StringBuilder();
  51.             foreach (byte b in ms.ToArray())
  52.             {
  53.                 ret.AppendFormat("{0:X2}", b);
  54.             }
  55.             ret.ToString();
  56.             return ret.ToString();
  57.         }
  58.        /// <summary>
  59.        /// DEC 解密过程
  60.        /// </summary>
  61.        /// <param name="pToDecrypt">被解密的字符串</param>
  62.        /// <param name="sKey">密钥(只支持8个字节的密钥,同前面的加密密钥相同)</param>
  63.        /// <returns>返回被解密的字符串</returns>
  64.         public string Decrypt(string pToDecrypt, string sKey)
  65.         {
  66.            try
  67.            {
  68.                 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  69.                 byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
  70.                 for (int x = 0; x < pToDecrypt.Length / 2; x++)
  71.                 {
  72.                     int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
  73.                     inputByteArray[x] = (byte)i;
  74.                 }
  75.                 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改
  76.                 des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
  77.                 MemoryStream ms = new MemoryStream();
  78.                 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
  79.                 cs.Write(inputByteArray, 0, inputByteArray.Length);
  80.                
  81.                 cs.FlushFinalBlock();            
  82.                 //建立StringBuild对象,createDecrypt使用的是流对象,必须把解密后的文本变成流对象
  83.                 StringBuilder ret = new StringBuilder(); 
  84.                 return System.Text.Encoding.Default.GetString(ms.ToArray());
  85.              }
  86.              catch (Exception)
  87.              {
  88.                 return "解密失败,密钥验证失败....";
  89.              }
  90.         }
  91. }
原创粉丝点击