`
caozuiba
  • 浏览: 901044 次
文章分类
社区版块
存档分类
最新评论

加密解密Url的类

 
阅读更多
<iframe marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/images/b.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;

namespace NetBesttone.BaseClass
{
/// <summary>
/// 此类用来加密与解密存在于URL中的参数
/// </summary>
public class IaskUrlEncode
{
public IaskUrlEncode()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
string _QueryStringKey = "abcdefgh"; //URL传输参数加密Key
string _PassWordKey = "hgfedcba";//PassWord加密Key

#region 公共方法
/// <summary>
/// 加密URL传输的字符串
/// </summary>
/// <param name="QueryString"></param>
/// <returns></returns>
public string EncryptQueryString(string QueryString)
{
return Encrypt(QueryString, _QueryStringKey);
}


/// <summary>
/// 解密URL传输的字符串
/// </summary>
/// <param name="QueryString"></param>
/// <returns></returns>
public string DecryptQueryString(string QueryString)
{
return Decrypt(QueryString, _QueryStringKey);
}


/// <summary>
/// 加密帐号口令
/// </summary>
/// <param name="PassWord"></param>
/// <returns></returns>
private string EncryptPassWord(string PassWord)
{
return Encrypt(PassWord, _PassWordKey);
}


/// <summary>
/// 解密帐号口令
/// </summary>
/// <param name="PassWord"></param>
/// <returns></returns>
private string DecryptPassWord(string PassWord)
{
return Decrypt(PassWord, _PassWordKey);
}
#endregion

#region 加密过程
/// <summary>
/// DEC 加密过程
/// </summary>
/// <param name="pToEncrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
private string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();//把字符串放到byte数组中

byte[] inputByteArray = Encoding.Default.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();
}
#endregion

#region 解密过程
/// <summary>
/// DEC 解密过程
/// </summary>
/// <param name="pToDecrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
private 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();//建立StringBuilder对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

return System.Text.Encoding.Default.GetString(ms.ToArray());
}
#endregion

#region 匹配过程
/// <summary>
/// 检查己加密的字符串是否与原文相同
/// </summary>
/// <param name="EnString"></param>
/// <param name="FoString"></param>
/// <param name="Mode"></param>
/// <returns></returns>
private 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;
}
}
}
#endregion
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics