有点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));
}
}
运行结果界面:
前台:
<%@ 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));
}
}
运行结果界面:
相关文章推荐
- openssl对数组加密解密的完整实现代码
- openssl对数组加密解密的完整实现代码
- C# base64加密解密完整代码(支持中文,全角符号)
- Java加密解密和数字签名完整代码示例
- openssl对数组加密解密的完整实现代码-
- php的一个简单加密解密代码
- PHP内核探索:代码的加密与解密
- 一组PHP可逆加密解密算法实例代码
- iOS 3DES加密解密(一行代码搞定)
- C#代码实现对AES加密解密
- jsencrypt代码分析——openssl的rsa加密解密在js的实现
- 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码
- AES加密解密代码
- 解密zoeeyguard扩展加密后的php代码
- DES加密解密代码
- Android代码混淆、第三方平台加固加密、渠道分发 完整教程
- 【代码笔记】3DES+Base64加密解密
- 说一说ASP.NET web.config 加密及解密方法 (代码)
- Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(转)
- Cisco Type 7 Password 加密解密原理和代码