貓七數據加密、解密類

在很多場合,特別重要的要加密傳輸。使用成熟的加密算法是一個不錯的選擇,但是~ 有些算法這個語言支持而另一種語言不支持。或者直接要安裝某某組件,實在是太煩瑣了,為了方便以后使用,自己抽空寫了一個。

'=====================================================================
'=                       貓七數據加密、解密類                         = 
'=     Copyright (c) 2011 貓七(QQ:77068320) All rights reserverd.    =
'=              請尊重作者勞動成果,轉載請保留代碼的完整性             =
'=====================================================================
'= 作者:苗啟源(博客:http://www.yslfodr.com)                        =
'= 討論:http://www.yslfodr.com/p/catseven-coding
'= 最新:http://www.yslfodr.com/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.yslfodr.com/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指定對照表

發表評論

電子郵件地址不會被公開。 必填項已用*標注

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據