搜索:
首页 >> 下载中心 >> Asp源码 >> OASK问答系统整合UCenter所用的ASP版_authcode加密解密函数uc_authcode

OASK问答系统整合UCenter所用的ASP版_authcode加密解密函数uc_authcode

2011-6-19 来源:oask 网友评论投递文章
uc_authcode源代码下载

<!--#include file="php_MD5.asp"-->

<!--#include file="php_base64.asp"-->
<%
'==================================================================================
'模块用途:OASK问答系统整合UCenter所用的ASP版_authcode加密解密函数uc_authcode
'其他应用:可用于所有要与UCenter进行整合的ASP程序中(本模块仅实现加密解密函数部分)
'软件名称:oASK问答系统(仿百度知道程序)
'官方站点:http://www.oask.com.cn
'版权所有:天津聚问网络
'郑重声明:
' ①、任何人可以免费在自己的产品里使用我们的代码
' ②、请保留上述信息,不影响软件运行速度
'==================================================================================

'函数测试,如果要测试加密解密,请取消下边这几行代码的注释
'==================================================================================
'Const Key="123456789"
'Dim Str1, Str2, Str3
'Str1="http:/www.xxx.com/xxxxxxxxxxxxx"
'Str2=uc_authcode(Str1,"",Key)
'Str3=uc_authcode(Str2,"DECODE",Key)
'response.write "加密前:" &Str1& "<br>加密后:" & Str2 & "<br>解密后:" & Str3

'函数说明:
'======================================================
'str 要加密或解密的字符串
'operation 操作:等于DECODE时是解密操作,否则是加密操作
'key 加密密匙,UC与应用程序所设置的相同的加密密匙字符串
function uc_authcode(ByVal str, ByVal operation, ByVal key)
uc_authcode = ""
if Len(str)<4 then Exit Function

Const ckey_length = 4
Dim keya, keyb, keyc, md5MT, cryptkey, key_length, string_length, box, rndkey, i, j, tmp, iTmp, tmpResult, a, x1, x2

key = Php_MD5(key)
keya = Php_MD5(Left(key, 16))
keyb = Php_MD5(Right(key, 16))
md5MT = Php_MD5(microtime())
if ckey_length > 0 then
if operation="DECODE" then
keyc = Left(str, ckey_length)
else
keyc = Right(md5MT, ckey_length)
end if
else
keyc = ""
end if

cryptkey = keya & Php_MD5(keya & keyc)
key_length = Len(cryptkey)

Redim box(255)
for i = 0 to 255
box(i) = i
next

Redim rndkey(255)
for i = 0 to 255
rndkey(i) = Asc(Mid(cryptkey, i Mod key_length + 1, 1))
next

j = 0
for i = 0 to 255
j = (j + box(i) + rndkey(i)) Mod 256
tmp = box(i)
box(i) = box(j)
box(j) = tmp
next

if operation="DECODE" then
tmp = Right(str, Len(str)-ckey_length)
tmpResult = php_Base64Decode(tmp)
string_length = UBound(tmpResult)+1

a = 0
j = 0
for i = 0 to string_length-1
a = (a + 1) Mod 256
j = (j + box(a)) Mod 256
tmp = box(a)
box(a) = box(j)
box(j) = tmp

x1 = tmpResult(i)
iTmp = (box(a) + box(j)) Mod 256
x2 = box(iTmp)
tmpResult(i) = x1 Xor x2
next

tmp = ""
for i=0 to 9
tmp = tmp & ChrB(tmpResult(i))
next
If IsNumeric(tmp) then iTmp = CLng(tmp) else iTmp = 0

x1 = ""
for i=10 to 25
x1 = x1 & Chr(tmpResult(i))
next

tmp = ""
for i=26 to UBound(tmpResult)
tmp = tmp & ChrB(tmpResult(i))
next
tmp = strAnsi2Unicode(tmp)
x2 = Left(Php_MD5(tmp & keyb), 16)

if (iTmp = 0 Or iTmp > php_time()) And (x1=x2) then
uc_authcode = tmp
else
uc_authcode = ""
end if

else
str = "0000000000" & Left(Php_MD5(str + keyb), 16) & str
str = strUnicode2Ansi(str)
string_length = LenB(str)
Redim tmpResult(string_length-1)

a = 0
j = 0
for i = 0 to string_length-1
a = (a + 1) Mod 256
j = (j + box(a)) Mod 256
tmp = box(a)
box(a) = box(j)
box(j) = tmp

x1 = AscB(MidB(str, i+1, 1))
iTmp = (box(a) + box(j)) Mod 256
x2 = box(iTmp)
tmpResult(i) = x1 Xor x2
next

uc_authcode = keyc & Replace(php_Base64Encode(tmpResult),"=","")
end if
end function

Const TimeZone=8 '服务器所在时区

function php_time()
php_time = dateadd("h", TimeZone*-1, now())
php_time = datediff("s", "1970-01-01 00:00:00", php_time)
end function

function microtime()
Dim sec, msec, i, s
sec = php_time()
msec = timer()*1000 Mod 1000
i = Max(0, 8-Len(Cstr(msec)))
s = String(i,"0")
microtime = "0." & msec & s & " " & sec
end function

Private Function Min(x,y)
if x<y then Min=x else Min=y
End Function

Private Function Max(x,y)
if x>y then Max=x else Max=y
End Function
%>

源码打包下载(php_base64,php_MD5,uc_authcode.asp

远程下载:uc_authcode.rar(7.22 KB)

本地下载uc_authcode.rar (7.22 KB)

Tags:加密  解密  authcode  discuz 
站长工具
ALEXA世界排名查询:
相关文章
loading 请稍等,评论加载中...

学习Asp到Asp之家(Aspxhome.com)

闽ICP备09044667号-4