using System;

using System.Security.Cryptography;

using System.Text;

///

/// c#与discuz的passport整合事例

/// 请保留以下信息以备出现问题时使用

/// 整合贡献:huozhe3136 QQ:2666556

/// 调试工具:Microsoft Visual Web Developer 2005

///

public partial class _Default : System.Web.UI.Page {

//------------------------需要修改的设置---------------------------------

string webUrl           = "http://localhost:1627/webapp/Default.aspx";//这里修改为你的测试主站的地址,不要缺少最后的'/'号

string dzUrl            = "http://localhost:8080/discuz/";//这里修改为你的dz地址,不要缺少最后的'/'号

string dzPassportKey    = "1234567890";//这里修改为你的dz后台通行证设置里的possportkey

string dzForward        = "";

string dzAuth           = "";

string dzVerify         = "";

protected void Page_Load(object sender, EventArgs e){

dzForward = Request.QueryString["forward"];

if (Request.QueryString["act"] == "logout") logout();

if(Session["username"]!=null) Response.Write(Session["username"].ToString()+ "登陆成功! 点击这里退出登陆 访问论坛
");

}

protected void logout(){

Session["username"] = null;

dzForward           = Request.QueryString["forward"];//获取返回地址

if (dzForward == "") dzForward = webUrl;//如果返回地址为空,则返回设置的页

dzVerify            = md5("logout" + dzForward + dzPassportKey);

dzForward           = Server.UrlEncode(dzForward);

Response.Redirect(dzUrl + "api/passport.php?action=logout&auth=&forward=" + dzForward + "&verify=" + dzVerify);

}

protected void Button1_Click(object sender, EventArgs e){

string postUsername;

string postPwd;

postUsername        = username.Text.ToString().Trim();

postPwd             = password.Text.ToString();

if(postUsername=="admin" && postPwd=="123456"){

Session["username"]=postUsername;//设置主站自身的cookie或session;

//---------------------------passport注册或登陆整合开始-----------------------------

string memberInfo = "username=" + postUsername

+ "&password=" + md5(postPwd)

+ "&time="+ time()//获取当前时间与格林威治的秒差

+ "&email="+"abc@abc.com";//需要email的值,实际整合通常情况是从数据库里获取用户email

dzAuth          = passport_encrypt(memberInfo , dzPassportKey);

dzForward       = forward.Value.ToString().Trim();//获取返回地址

if(dzForward=="") dzForward = webUrl;//如果返回地址为空,则返回设置的页

dzVerify        = md5("login" + dzAuth + dzForward + dzPassportKey);

dzAuth          = Server.UrlEncode(dzAuth);

dzForward       = Server.UrlEncode(dzForward);

Response.Redirect(dzUrl + "api/passport.php?action=login&auth=" + dzAuth + "&forward=" + dzForward + "&verify=" + dzVerify);

//---------------------------passport注册或登陆整合结束-----------------------------

}else Response.Write("登陆失败
");

}

//------------------------------------以下为一些关键函数------------------------------

// 将字符串转换为byte数组

public byte[] strToByteAry(string str){

return Encoding.Default.GetBytes(str);

}

// c# dz通信证编码函数

public string passport_encrypt(string txt, string key){

byte[] randomNumber = new byte[1];

RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();

Gen.GetBytes(randomNumber);

int rand = Convert.ToInt32(randomNumber[0]);

string encrypt_key = md5(rand.ToString());

byte[] txtAry = strToByteAry(txt);

byte[] encryAry = strToByteAry(encrypt_key);

int j = 0;

int ctr = 0;

byte[] tmp = new byte[2 * txtAry.Length];

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

{

ctr = ctr == encryAry.Length ? 0 : ctr;

tmp[j++] = encryAry[ctr];

tmp[j++] = xor(txtAry[i], encryAry[ctr++]);

}

return Convert.ToBase64String(passport_key(tmp, key));

}

// c# dz通行证解码函数

public string passport_decrypt(string txt, string key){

byte[] t = Convert.FromBase64String(txt);

byte[] btxt = passport_key(t, key);

byte[] btmp = new byte[btxt.Length];

int j = 0;

for (int i = 0; i < btxt.Length; i++, j++)

btmp[j] = xor(btxt[i], btxt[++i]);

return Encoding.Default.GetString(btmp);

}

// c# dz通行证密匙处理函数

public byte[] passport_key(byte[] btxt, string key){

key = md5(key);

byte[] keyAry = strToByteAry(key);

int ctr = 0;

byte[] tmp = new byte[btxt.Length];

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

ctr = (ctr == keyAry.Length) ? 0 : ctr;

tmp[i] = xor(btxt[i], keyAry[ctr++]);

}

return tmp;

}

// 针对byte的异或

public byte xor(byte a, byte b){

return Convert.ToByte(a ^ b);

}

// 获取UNIX时间戳

public string time(){

DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

DateTime dtNow = DateTime.Parse(DateTime.Now.ToString());

TimeSpan toNow = dtNow.Subtract(dtStart);

string timeStamp = toNow.Ticks.ToString();

timeStamp = timeStamp.Substring(0, timeStamp.Length - 7);

return timeStamp;

}

// md5加密

public string md5(string str){

MD5 md5Hasher = MD5.Create();

string re="";

byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(str));

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

re += data[i].ToString("x2");

return re;

}

}

java passport_Passport 通行证 整合相关推荐

  1. Java SSM6——SSM整合

    Java SSM6--SSM整合 1.Mybatis 1.1.数据库准备 CREATE TABLE person(id INT PRIMARY KEY,NAME VARCHAR(10),PASSWOR ...

  2. java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取

    java spring+mybatis整合实现爬虫之<今日头条>搞笑动态图片爬取(详细) 原文地址原博客地址 先上效果图 抓取的动态图: 数据库: 一.此爬虫介绍 今日头条本身就是做爬虫的 ...

  3. Java springBoot项目整合海康威视摄像头抓拍车辆功能

    Java springBoot项目整合海康威视摄像头抓拍获取车辆信息功能 这篇文字写于去年的11月份,项目部署上去一段时间后,被反应有自动停止抓拍的BUG,我在代码中的解决办法是写了一个定时任务, 让 ...

  4. Java学习——springboot整合mysql、redis、mongodb

    Java学习--springboot整合mysql.redis.mongodb 1. 环境搭建 2. 搭建目录结构 3. 各层内容 4. 测试 1. 环境搭建 创建SpringBoot工程时勾选如下技 ...

  5. java切面类整合_SpringBoot2.x【五】整合AOP切面编程

    SpringBoot2.x[五]整合AOP切面编程 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面. ...

  6. Java架构-(十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  7. java游戏2333整合包,我的世界魔法荣耀

    <我的世界魔法荣耀懒人包>是由玩家以神秘时代.魔法为主题进行整合的一款懒人包.该懒人包玩法丰富,加入了多种不同的有趣模组,玩家可以体验一个内容丰富的MC世界,去寻找昔日的魔法荣光. [游戏 ...

  8. java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  9. ehcache 缓存java对象_Ehcache 整合Spring 使用页面、对象缓存

    Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...

最新文章

  1. VAE变分自编码器实现
  2. 如何在AxureRP7中使用FontAwesome字体
  3. OC之NSArray/NSMutableArrray
  4. 从flink-example分析flink组件(3)WordCount 流式实战及源码分析
  5. java svg image xlink_SVG基础 | SVG image 元素
  6. .NET 6 中的 LINQ 更新
  7. Exchange 2010无法安装问题解决方法
  8. caged系统pdf_建筑行业单词中英文对照教材.pdf
  9. mysql 5.5.29 winx64_【转载】MySQL 5.7.29详细下载安装配置教程winx64
  10. 【转】容器 C++ set和map
  11. 如何用Java将DWG和DXF文件转换为PDF?看了这篇就懂了
  12. 使用表格制作流量查询表
  13. BigDecimal的除法
  14. 【我的OpenGL学习进阶之旅】EGL简介
  15. php 设置斜体字体,斜体 - FontForge 教程 | BootWiki.com
  16. Python之warnings模块忽略warning警告错误
  17. 对抗机器学习——FGSM经典论文 EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES
  18. 通过拼音模糊搜索汉字的功能实现
  19. 反射镜镀膜与波长关系
  20. “火星自治”,马斯克这次是认真的吗?

热门文章

  1. 华为P8解锁问题:waiting for device解决方法(亲测成功)
  2. C# 数据库SqlServer基础增删改查(返回单个值)
  3. Sigmoid 函数(logistic函数)笔记
  4. LitJson官方示例(文档翻译)
  5. 英式音标26字母(H-N)
  6. 博士意外发现秘密:DALL-E 2自创语言,人看不懂但能生成特定图像,可能会被用来搞事!...
  7. Linux配置ssh和scp环境
  8. 揭秘手机空间不足的小尝试
  9. Wireshark分析--SMB2协议包及hashcat爆破
  10. 服务器ubuntu系统登录,ubuntu服务器版登陆