在很多场合,特别重要的要加密传输。使用成熟的加密算法是一个不错的选择,但是~ 有些算法这个语言支持而另一种语言不支持。或者直接要安装某某组件,实在是太烦琐了,为了方便以后使用,自己抽空写了一个。
'===================================================================== '= 猫七数据加密、解密类 = '= Copyright (c) 2011 猫七(QQ:77068320) All rights reserverd. = '= 请尊重作者劳动成果,转载请保留代码的完整性 = '===================================================================== '= 作者:苗启源(博客:http://www.miaoqiyuan.cn) = '= 讨论:http://www.miaoqiyuan.cn/p/catseven-coding '= 最新:http://www.miaoqiyuan.cn/products/Catseven.Coding.rar '===================================================================== '= 文件名:Class.Catseven.Coding.asp = '= 功 能:猫七数据加密、解密函数 = '===================================================================== class Catseven_Coding public akey,ekey,keylen,keymax,autolen '类初始化 ' akey 编码表 ' ekey 密钥 ' keylen 标准编码长度 ' keymax 最大编码长度,默认1000,代表1000-数据长度必须是3位数字,即数据的长度可以为0-900 ' autolen 如果不足,是否补全 public sub class_initialize() akey = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ekey = "f67RSTUOPDp02qd34ABbMijQFxyr5szZnot89+Y/=EghkVavwuHCXWmKLJNGIcel1" keylen = 900 keymax = 1000 autolen= true end sub '函数:randkey '功能:创建随机字符 '参数:rndkeylen 随机字符长度 private function randkey(byval rndkeylen) dim rndnum,keymap,rstr,i keymap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" rstr = "" for i = 1 to rndkeylen randomize rndnum = cLng(len(keymap) - 1) * rnd() + 1 rstr = rstr & mid(keymap,rndnum,1) next randkey = rstr end function '函数:encode '功能:加密字符串 '参数:str 要加密的字符串 public function encode(byval str) dim alen,i,vstr,kstr,vkey str = replace(str,"\","") alen = len(str) if alen = 0 then encode = "" else vstr = "" vkey = randkey(1) for i = 1 to len(str) kstr = mid(str,i,1) vstr = vstr & mid(akey,instr(ekey,kstr),1) next alen = keymax - alen vstr = len(alen) & vkey & randkey(9 - len(keymax)) & alen & UCase(vkey) & vstr alen = len(vstr) if keylen < alen then keylen = alen if keylen > keymax * 0.9 then keylen = keymax * 0.9 vstr = mid(vstr,1,keylen) if alen < keylen and autolen = true then vstr = vstr & randkey(keylen - alen) end if encode = vstr end if end function '函数:decode '功能:解密字符串 '参数:str 要解密的字符串 public function decode(byval str) dim alen,i,vstr,kstr,vkey alen = mid(str,1,1) vkey = mid(str,2,1) if not isnumeric(alen) then decode = "" else alen = mid(str,11 - alen,alen) if not isnumeric(alen) then decode = "" else alen = keymax - alen + 1 str = mid(str,11,alen) if mid(str,1,1) = UCase(vkey) then vstr = "" str = mid(str,2) for i = 1 to len(str) kstr = mid(str,i,1) vstr = vstr & mid(ekey,instr(akey,kstr),1) next decode = vstr else decode = "" end if end if end if end function end class
使用的时候比较简单,只支持英文加密,所以使用的时候,请配合base64函数(相关代码:http://www.miaoqiyuan.cn/p/tag/base64)使用。加密的时候用encode。
set a = new Catseven_Coding a.autolen = true a.keylen = 150 response.write a.encode("5qyi6L+O5ZKM5oiR6K6o6K6677yM5pys5paH5Y6f5paH5Zyw5Z2A77yaaHR0cDovL3d3dy5taWFvcWl5dWFuLmNuL3AvQ2F0c2V2ZW4tQ29kaW5n") 'base64编码后的字符
解密的时候直接用decode。
set a = new Catseven_Coding response.write a.decode("3kfRpeT888KcNaVB4lHcf3UchVDB3BhB3BBCCaUcKadcKuycmBAcKuycfawcfMRCCauuyDL9Jhv4POPOaciu1Yv91/cO1Yx426x4PRvXMYL9MtMf1QiXMksu1cgkwbbM5c2IZDXHMqcZSnkCb4C6LP") '解码后,为base64编码
可以指定ekey指定对照表