<!--#include file="CBase64.asp"-->
|
<!--#include file="ClassBase64Encode.asp"-->
|
|
<%
|
Class ClassCryptoAES
|
'Useage:
|
'Dim cls
|
'Set cls=new ClassCryptoAES
|
'cls.EncodingAESKey="eX8nNDRGOPHfdoeY1nDdnx6qEc5pqWi2eGTx2eD2V8n"
|
'cls.Encode("TargetString")
|
'cls.Decode("TargetString")
|
|
|
Private cfgAESKey
|
Private cfgEncodingAESKey
|
Private m_ClassBase64Encode
|
Private m_objRijndaelManaged
|
Private m_objUTF8Encoding
|
Private m_enc
|
Private m_dec
|
|
|
Private Sub Class_Initialize
|
'Set m_ClassBase64Encode=new ClassBase64Encode
|
Set m_ClassBase64Encode=new CBase64
|
Set m_objRijndaelManaged=server.CreateObject("System.Security.Cryptography.RijndaelManaged")
|
Set m_objUTF8Encoding=server.CreateObject("System.Text.UTF8Encoding")
|
End Sub
|
|
Private Sub Class_Terminate()
|
set m_enc= Nothing
|
set m_dec= Nothing
|
Set m_ClassBase64Encode=Nothing
|
Set m_objRijndaelManaged=Nothing
|
Set m_objUTF8Encoding=Nothing
|
End Sub
|
|
Public Property Let EncodingAESKey(ByVal field)
|
cfgEncodingAESKey = field
|
'cfgAESKey=m_ClassBase64Encode.Decode64(cfgEncodingAESKey + "=")
|
cfgAESKey=m_ClassBase64Encode.DecodeText(cfgEncodingAESKey + "=")
|
Call SetCryptoIVandKey()
|
End Property
|
|
Public Property Get EncodingAESKey
|
EncodingAESKey = cfgEncodingAESKey
|
End Property
|
|
Public Function Encode(s)
|
Dim bytes
|
|
bytes=m_objUTF8Encoding.GetBytes_4(s)
|
bytec=m_enc.TransformFinalBlock((bytes),0,lenb(bytes))
|
|
'Encode=m_objUTF8Encoding.GetString((bytec))
|
Encode=Bytes2Str(bytec,"unicode")
|
End Function
|
|
Private Sub toString(arr)
|
|
response.Write( Bytes2BSTR(arr) & "<hr>")
|
End Sub
|
|
Public Function Decode(s)
|
Dim bytec,byted
|
'bytec=m_objUTF8Encoding.GetBytes_4(s)
|
'bytec=Str2Bytes(m_ClassBase64Encode.Decode64(s),"unicode")
|
bytec=Str2Bytes(s,"unicode")
|
'toString(bytec)
|
byted=m_dec.TransformFinalBlock((bytec),0,lenb(bytec))
|
|
'toString(byted)
|
Decode=m_objUTF8Encoding.GetString((byted))
|
End Function
|
|
|
Private Sub SetCryptoIVandKey()
|
'Set IV and key
|
m_objRijndaelManaged.IV=GetBytes(cfgAESKey,0,16)
|
m_objRijndaelManaged.key=GetBytes(cfgAESKey,0,32)
|
set m_enc= m_objRijndaelManaged.CreateEncryptor()
|
set m_dec= m_objRijndaelManaged.CreateDecryptor()
|
End Sub
|
|
Public Function GetBytes(byval str,istart,iLen)
|
Dim ms,strRet
|
Set ms = CreateObject("ADODB.Stream")
|
ms.Type = 2
|
ms.Charset = "utf-8"
|
ms.Open
|
ms.WriteText str
|
|
ms.Position = 0
|
ms.Type = 1
|
|
ms.Position = istart+3
|
vout = ms.Read(iLen)
|
ms.close
|
Set ms = nothing
|
GetBytes = vout
|
End Function
|
|
Function Bytes2BSTR(vin)
|
Bytes2BSTR = Bytes2Str(vin,"utf-8")
|
End Function
|
|
Public Function Bytes2Str(vin,charset)
|
Dim ms,strRet
|
Set ms = Server.CreateObject("ADODB.Stream") '建立流对象
|
ms.Type = 1 ' Binary
|
ms.Open
|
ms.Write vin '把vin写入流对象中
|
|
ms.Position = 0 '设置流对象的起始位置是0 以设置Charset属性
|
ms.Type = 2 'Text
|
ms.Charset = charset '设置流对象的编码方式为 charset
|
|
strRet = ms.ReadText '取字符流
|
ms.close '关闭流对象
|
Set ms = nothing
|
Bytes2Str = strRet
|
End Function
|
|
Public Function Str2Bytes(str,charset)
|
Dim ms,strRet
|
Set ms = CreateObject("ADODB.Stream") '建立流对象
|
ms.Type = 2 ' Text
|
ms.Charset = charset '设置流对象的编码方式为 charset
|
ms.Open
|
ms.WriteText str '把str写入流对象中
|
|
ms.Position = 0 '设置流对象的起始位置是0 以设置Charset属性
|
ms.Type = 1 'Binary
|
|
ms.Position = 2 '跳过0-1字节,不同的charset需跳过的位置不同
|
vout = ms.Read(ms.Size) '取字符流
|
ms.close '关闭流对象
|
Set ms = nothing
|
Str2Bytes = vout
|
End Function
|
|
|
Public Function toBase64(s)
|
'toBase64=m_ClassBase64Encode.Encode64(s)
|
toBase64=m_ClassBase64Encode.EncodeText(s)
|
End Function
|
|
Public Function FromBase64(s)
|
'FromBase64=m_ClassBase64Encode.Decode64(s)
|
FromBase64=m_ClassBase64Encode.DecodeText(s)
|
End Function
|
|
End Class
|
|
|
|
%>
|