|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。加密|数据|算法起首复杂先容一下有关加密的背景。因为美国克制几种暗码算法的对外出口的加密位数(比方SSL的40位加密限定),本文将先容一种ASP可使用的复杂字符加密算法,而不是那些受限定的加密算法。实在,这里先容的加密算法关于一样平常的使用来讲已充足解密人贫苦一阵子的了。它的加密基本是最复杂的Vernum暗码办法,我将鄙人一篇文章中先容这类暗码。 它的基础道理是,必要有一个必要加密的
明文和一个随机天生的解密钥匙文件。然后利用这两个文件组合起来天生密文。
(明文)组合(密钥)=加密后的密文
以是本文先容的是天生密钥的代码。我们假定我们天生的密钥为512位长的密钥,它已充足来加密一个文本字符了。代码以下:
KeyGeN.asp文件
<%
******************************
KeyGeN.asp
******************************
Constg_KeyLocation="C:key.txt"
Constg_KeyLen=512
OnErrorResumeNext
CallWriteKeyToFile(KeyGeN(g_KeyLen),g_KeyLocation)
ifErr<>0Then
Response.Write"ERRORGENERATINGKEY."&"<P>"
Response.WriteErr.Number&"<BR>"
Response.WriteErr.Description&"<BR>"
Else
Response.Write"KEYSUCCESSFULLYGENERATED."
EndIf
SubWriteKeyToFile(MyKeyString,strFileName)
DimkeyFile,fso
setfso=Server.CreateObject("scripting.FileSystemObject")
setkeyFile=fso.CreateTextFile(strFileName,true)
keyFile.WriteLine(MyKeyString)
keyFile.Close
EndSub
FunctionKeyGeN(iKeyLength)
Dimk,iCount,strMyKey
lowerbound=35
upperbound=96
RandomizeInitializerandom-numbergenerator.
ForI=1toiKeyLength
s=255
k=Int(((upperbound-lowerbound)+1)*Rnd+lowerbound)
strMyKey=strMyKey&Chr(k)&""
next
KeyGeN=strMyKey
EndFunction
%>
在IIS下运转下面的KeyGeN.asp页面。你只必要云云做一次,他将把密钥写进文件c:key.txt中(假如你乐意的话,你也能够把这个文件放到别的一个加倍平安的中央).然后你能够翻开这个key.txt文件,它将包括512个ASCII码在35到96之间的字符.而且因为是随机天生的,以是每一个人的公家密钥文件key.txt将是纷歧样的,上面是一个例子密钥文件:
IY/;$>=3)?^-+7M32#Q]VOII.Q=OFMC`:P7_B;LG=I+@5%*+OP:F_=;NSY`-^S.`AA=BJ3M0.WF#T5LGK(=/<:+C2K/^7AI$;PUOME2+T8ND?W$C(J,;631M-LD5F%%1TF_&K2A-D-54[2P,#*JU%6`0RF3CMF0(#T07UFZ=>#,+.AW_/+]DIB;2DTIA57TT&-)O/*FM>H.XH5W^0Y*=71+5*^`^PKJ(=E/X#7A:?,S>R&T;+B#<:-*@)X9F`_`%QA3Z95.?_T#1,$2#FWW5PBH^*<])A(S0@AVD8C^Q0R^T1D?(1+,YE71X+.*+U$:3XO^Q].KG&0N0];[LJ
上面再细心剖析一下下面的程序,我们发明个中的lowerbound和upperbound的数值实在就是你想利用来加密的ASCII字符局限。前面一篇文章中将先容怎样利用这个密钥来加密息争密一个字符串.
在第一部分,会商了怎样天生密钥,上面将先容怎样利用这个密钥来加密息争密一个字符串。
上面的代码就是可以同时完成这个功效的函数
Crypt.asp文件
<%
Dimg_Key
Constg_CryptThis="Nowisthetimefor
allgoodmentocometotheaidoftheircountry."
Constg_KeyLocation="c:key.txt"
g_Key=mid(ReadKeyFromFile(g_KeyLocation),1,Len(g_CryptThis))
Response.Write"<p>ORIGINALSTRING:"&g_CryptThis&"<p>"
Response.Write"<p>KEYVALUE:"&g_Key&"<p>"
Response.Write"<p>ENCRYPTEDCYPHERTEXT:"&EnCrypt(g_CryptThis)&"<p>"
Response.Write"<p>DECRYPTEDCYPHERTEXT:"&DeCrypt(EnCrypt(g_CryptThis))&"<p>"
FunctionEnCrypt(strCryptThis)
DimstrChar,iKeyChar,iStringChar,I
forI=1toLen(strCryptThis)
iKeyChar=Asc(mid(g_Key,I,1))
iStringChar=Asc(mid(strCryptThis,I,1))
***uncommentbelowtoencryptwithaddition,
iCryptChar=iStringChar+iKeyChar
iCryptChar=iKeyCharXoriStringChar
strEncrypted=strEncrypted&Chr(iCryptChar)
next
EnCrypt=strEncrypted
EndFunction
FunctionDeCrypt(strEncrypted)
DimstrChar,iKeyChar,iStringChar,I
forI=1toLen(strEncrypted)
iKeyChar=(Asc(mid(g_Key,I,1)))
iStringChar=Asc(mid(strEncrypted,I,1))
***uncommentbelowtodecryptwithsubtraction
iDeCryptChar=iStringChar-iKeyChar
iDeCryptChar=iKeyCharXoriStringChar
strDecrypted=strDecrypted&Chr(iDeCryptChar)
next
DeCrypt=strDecrypted
EndFunction
FunctionReadKeyFromFile(strFileName)
DimkeyFile,fso,f
setfso=Server.CreateObject("Scripting.FileSystemObject")
setf=fso.GetFile(strFileName)
setts=f.OpenAsTextStream(1,-2)
DoWhilenotts.AtEndOfStream
keyFile=keyFile&ts.ReadLine
Loop
ReadKeyFromFile=keyFile
EndFunction
%>
在Crypt.asp中我们起首从密钥文件中失掉密钥值,然后从这段密钥中截取和我们必要加密的明文一样长度的密钥。然后利用一个复杂的异或操纵将明文和密钥举行运算,那末失掉的了局就是加密后的密文了。历程很复杂的。因为是利用了异或操纵,以是解密将十分复杂,只需利用一样的密钥对密文再次举行异或操纵就可以够解密
因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。还无法完全实现一些企业级的功能:完全的集群、负载均横。 |
|