您的位置:首页 > 编程语言

有点bt的加密解密代码完整示列

2008-06-23 10:45 375 查看
因想寻找一个比较好的对url参数加密解密的函数或类,要求有自定义的key来实现加密解密。在网上查了半天,终于找到一个比较完整的例子,但很精简,使用时还需要写些代码。原代码地址:http://www.cnblogs.com/dotnetbbs/articles/443923.html 原文里少了个GetRandomNumber()方法,自己加上,很简单。废话少说,直接贴我调试成功的代码吧。

前台:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="encrpty.aspx.cs" Inherits="encrpty" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>加密测试页</title>

</head>

<body>

<form id="form1" runat="server">

<div> 被加密的字符窜:<asp:TextBox ID="txbStr" runat="server"></asp:TextBox><br />

加密的kye:<asp:TextBox ID="txbKey" runat="server"></asp:TextBox><br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="加密" /><br /> <asp:Label ID="Label1" runat="server"></asp:Label><br />

解密的key:<asp:TextBox ID="txbKey2" runat="server"></asp:TextBox><br /> <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="解密" /><br /> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>

</form>

</body>

</html>

后台:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls; using System.IO;

using System.Text;

using System.Collections.Generic;//

using System.Security.Cryptography;//以上这两个类很重要,必须引用

public partial class encrpty : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)//调用以下函数进行变态的加密; {

this.Label1.Text = Passport_Encrypt(txbStr.Text.ToString(), txbKey.Text.ToString());

}

public string Passport_Encrypt(string txt, string key)//集成md5类、base64、自定义加密算法于一身的超BT加密函数!!!

{

// 使用随机数发生器产生 0~32000 的值并 MD5()

string encrypt_key = Encrypt_MD5_Standard(GetRandomNumber(0, 32000).ToString()); // 变量初始化

int ctr = 0;

string tmp = "";

// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数

for (int i = 0; i < txt.Length; i++)

{ // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零

ctr = ctr == encrypt_key.Length ? 0 : ctr; // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位, // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1

tmp += encrypt_key[ctr].ToString() + ((char)(txt[i] ^ encrypt_key[ctr++])).ToString();

} // 返回结果,结果为 passport_key() 函数返回值的 base65 编码结果

return Base64Encrypt(Passport_Key(tmp, key));

}

public string GetRandomNumber(int minValue, int maxValue)//随机数字生成器

{

Random rd = new Random();

return rd.Next(minValue, maxValue).ToString();

}

public string Base64Encrypt(string pToEncrypt)//Base64加密

{

return Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(pToEncrypt));

}

public string Encrypt_MD5_Standard(string strpwd)//MD5 hash

{

MD5 MD5 = new MD5CryptoServiceProvider();//调用md5加密解密服务程序

byte[] datSource = System.Text.Encoding.Default.GetBytes(strpwd);//按照指定编码类型把字符串指定到指定的Byte数组

byte[] newSource = MD5.ComputeHash(datSource);//计算md5序列

string byte2String = null;

for (int i = 0; i < newSource.Length; i++)

{

string thisByte = newSource[i].ToString("x");

if (thisByte.Length == 1) thisByte = "0" + thisByte;

byte2String += thisByte;

}

return byte2String;

}

public string Passport_Key(string txt, string encrypt_key)//Passport 密匙处理函数

{ // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值

encrypt_key = Encrypt_MD5_Standard(encrypt_key); // 变量初始化 i

nt ctr = 0; string tmp = "";

// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数

for (int i = 0; i < txt.Length; i++)

{ // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零

ctr = ctr == encrypt_key.Length ? 0 : ctr; // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位, // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1

tmp += ((char)(txt[i] ^ encrypt_key[ctr++])).ToString();

}

return tmp;

}

protected void Button2_Click(object sender, EventArgs e)//解密;

{

this.Label2.Text = Passport_Decrypt(Label1.Text.ToString(), txbKey2.Text.ToString());

}

public string Passport_Decrypt(string txt, string key)//解密函数;

{

// $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起, // 经过 passport_key() 函数处理后的返回值

txt = Passport_Key(Base64Decrypt(txt), key); // 变量初始化

string tmp = "";

// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数

for (int i = 0; i < txt.Length; i++)

{

// $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,

// 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1

tmp += ((char)(txt[i] ^ txt[++i])).ToString();

}// 返回 $tmp 的值作为结果

return tmp;

}

public string Base64Decrypt(string pToDeCrypt)//base64逆转

{

return System.Text.Encoding.Default.GetString(Convert.FromBase64String(pToDeCrypt));

}

}

运行结果界面:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: