Ucenter实现以第三方非PHP脚本程序进行挂载
时间:2009-11-29
来源:互联网
本帖最后由 PHP_CC 于 2009-11-29 09:00 编辑
第一次在原创区写东西,非常激动。。。东西很简单,老鸟飘过把。。大家被笑我啊。。哈哈
其实就是GET进行传值,第一个例子是‘开源’传值。第二种是加密传值(利用discuz6下个加密机制),当然大家可以自己做个加密解密的机制传值,这样安全性更改。。但。。可别找MD5啊。。目前我们还没办法可逆。
我在这里只做个注册,其实都一样。。就不一一都做了
PPC的UBB有点问题。。但我相信大家肯定能看懂,就不改了。。。
第一个例子
第一次在原创区写东西,非常激动。。。东西很简单,老鸟飘过把。。大家被笑我啊。。哈哈
其实就是GET进行传值,第一个例子是‘开源’传值。第二种是加密传值(利用discuz6下个加密机制),当然大家可以自己做个加密解密的机制传值,这样安全性更改。。但。。可别找MD5啊。。目前我们还没办法可逆。
我在这里只做个注册,其实都一样。。就不一一都做了
PPC的UBB有点问题。。但我相信大家肯定能看懂,就不改了。。。
第一个例子
<form action="ucenter/api/uc.php" method="get"> <input type="hidden" name="action" value="reg"> username:<input type="text" name="username"> password:<input type="password" name="password"> E-mail:<input type="text" name="email"> <input type="submit" value="GET"> </form>uc.php
<? include 'config.inc.php'; include 'uc_client/client.php'; if ($_GET['action'] == 'reg') { $uid = uc_user_register($_GET['username'], $_GET['password'], $_GET['email']); if($uid <= 0) { if($uid == -1) { echo '<p>用-户名不合法</p>'; } elseif($uid == -2) { echo '<p>包含要允许注册的词语</p>'; } elseif($uid == -3) { echo '<p>用户名已经存在</p>'; } elseif($uid == -4) { echo '<p>Email 格式有误</p>'; } elseif($uid == -5) { echo '<p>Email 不允许注册</p>'; } elseif($uid == -6) { echo '<p>该 Email 已经被注册</p>'; } else { echo '<p>未定义</p>'; } } else { header ("<p>注册成功</p>"); } } ?>
作者: PHP_CC 发布时间: 2009-11-29
本帖最后由 PHP_CC 于 2009-11-29 09:04 编辑
第二种 是利用discuz6下的API加密解密机制
第二种 是利用discuz6下的API加密解密机制
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php include 'uc2.inc.php'; $passport_key = 'eqweqwewfewfweqwe'; $forward = 'http://www/uc2/uc2ok.html'; ?> <? if ($_GET['action'] == 'reg') { $member = array ( time => time(), username => $_POST['username'], password => $_POST['password'], email => $_POST['email'] ); $auth = passport_encrypt(passport_encode($member), $passport_key); $verify = md5(login.$auth.$forward.$passport_key); $auth=rawurlencode($auth); $forward=rawurlencode($forward); header("Location: [url=http://www/ucenter/api/uc2.php?action=reg&auth=$auth&forward=$forward&verify=$verify]http://www/ucenter/api/uc2.php?action=reg&auth=$auth&forward=$forward&verify=$verify[/url]"); } else { ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <form action="?action=reg"method="post"> username:<input type="text" name="username"> password:<input type="password" name="password"> E-mail:<input type="text" name="email"> <input type="submit" value="POST"> </form> <? } ?>uc2.inc.php
<?php /** * Passport 加密函数 * * @param string 等待加密的原字串 * @param string 私有密匙(用于解密和加密) * * @return string 原字串经过私有密匙加密后的结果 */ function passport_encrypt($txt, $key) { // 使用随机数发生器产生 0~32000 的值并 MD5() srand((double)microtime() * 1000000); $encrypt_key = md5(rand(0, 32000)); // 变量初始化 $ctr = 0; $tmp = ''; // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数 for($i = 0; $i < strlen($txt); $i++) { // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; // $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位, // 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); } // 返回结果,结果为 passport_key() 函数返回值的 base64 编码结果 return base64_encode(passport_key($tmp, $key)); } /** * Passport 解密函数 * * @param string 加密后的字串 * @param string 私有密匙(用于解密和加密) * * @return string 字串经过私有密匙解密后的结果 */ function passport_decrypt($txt, $key) { // $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起, // 经过 passport_key() 函数处理后的返回值 $txt = passport_key(base64_decode($txt), $key); // 变量初始化 $tmp = ''; // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数 for ($i = 0; $i < strlen($txt); $i++) { // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位, // 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1 $tmp .= $txt[$i] ^ $txt[++$i]; } // 返回 $tmp 的值作为结果 return $tmp; } /** * Passport 密匙处理函数 * * @param string 待加密或待解密的字串 * @param string 私有密匙(用于解密和加密) * * @return string 处理后的密匙 */ function passport_key($txt, $encrypt_key) { // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值 $encrypt_key = md5($encrypt_key); // 变量初始化 $ctr = 0; $tmp = ''; // for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数 for($i = 0; $i < strlen($txt); $i++) { // 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; // $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位, // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } // 返回 $tmp 的值作为结果 return $tmp; } /** * Passport 信息(数组)编码函数 * * @param array 待编码的数组 * * @return string 数组经编码后的字串 */ function passport_encode($array) { // 数组变量初始化 $arrayenc = array(); // 遍历数组 $array,其中 $key 为当前元素的下标,$val 为其对应的值 foreach($array as $key => $val) { // $arrayenc 数组增加一个元素,其内容为 "$key=经过 urlencode() 后的 $val 值" $arrayenc[] = $key.'='.urlencode($val); } // 返回以 "&" 连接的 $arrayenc 的值(implode),例如 $arrayenc = array('aa', 'bb', 'cc', 'dd'), // 则 implode('&', $arrayenc) 后的结果为 ”aa&bb&cc&dd" return implode('&', $arrayenc); } ?>uc2.php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <? include 'config.inc.php'; include 'uc_client/client.php'; $passport_key = 'eqweqwewfewfweqwe'; if($_GET['action'] == 'reg') { parse_str(passport_decrypt($_GET['auth'], $passport_key), $member); $uid = uc_user_register($member['username'], $member['password'], $member['email']); if($uid <= 0) { if($uid == -1) { echo '<p>用户名不合法</p>'; } elseif($uid == -2) { echo '<p>包含要允许注册的词语</p>'; } elseif($uid == -3) { echo '<p>用户名已经存在</p>'; } elseif($uid == -4) { echo '<p>Email 格式有误</p>'; } elseif($uid == -5) { echo '<p>Email 不允许注册</p>'; } elseif($uid == -6) { echo '<p>该 Email 已经被注册</p>'; } else { echo '<p>未定义</p>'; } } else { echo '<p>注册成功</p>'; } } function passport_decrypt($txt, $key) { $txt = passport_key(base64_decode($txt), $key); $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $md5 = $txt[$i]; $tmp .= $txt[++$i] ^ $md5; } return $tmp; } function passport_key($txt, $encrypt_key) { $encrypt_key = md5($encrypt_key); $ctr = 0; $tmp = ''; for($i = 0; $i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } return $tmp; } ?>
作者: PHP_CC 发布时间: 2009-11-29
谢谢分享。。
作者: kctsca 发布时间: 2009-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28