标题：asp加密
简介
一直以来，ASP技术受到了越来越多朋友的喜爱，使用ASP从事WEB开发的人也越来越多。ASP一个非常明显的特征是页面在服务器端经过处理之后发送到浏览器中的内容为标准的HTML格式，这样有效的保护了页面程序的原代码不被客户端轻易获取。
加密方式
Vernum密码方法它的基本原理是，需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后使用这两个文件组合起来生成密文。
下面的代码就是能够同时实现这个功能的函数 
KeyGeN.asp文件 
<% 
'****************************** 
' KeyGeN.asp 
'****************************** 
Const g_KeyLocation = "C:\key.txt" 
Const g_KeyLen = 512 
On Error Resume Next 
Call WriteKeyToFile(KeyGeN(g_KeyLen),g_KeyLocation) 
if Err <> 0 Then 
Response.Write "ERROR GENERATING KEY." & "<P>" 
Response.Write Err.Number & "<BR>" 
Response.Write Err.Description & "<BR>" 
Else 
Response.Write "KEY SUCCESSFULLY GENERATED." 
End If 
Sub WriteKeyToFile(MyKeyString,strFileName) 
Dim keyFile,fso 
set fso = Server.CreateObject("scripting.FileSystemObject") 
set keyFile = fso.CreateTextFile(strFileName,true) 
keyFile.WriteLine(MyKeyString) 
keyFile.Close 
End Sub 
Function KeyGeN(iKeyLength) 
Dim k,iCount,strMyKey 
lowerbound = 35 
upperbound = 96 
Randomize ' Initialize random-number generator. 
for i = 1 to iKeyLength 
s = 255 
k = Int(((upperbound - lowerbound) + 1) * Rnd + lowerbound) 
strMyKey = strMyKey & Chr(k) & "" 
next 
KeyGeN = strMyKey 
End Function 
%> 
在IIS下运行上面的KeyGeN.asp页面。你只需要如此做一次，他将把密钥写入文件 
c:\key.txt中 (如果你愿意的话，你也可以把这个文件放到另外一个更加安全的地方). 
然后你可以打开这个key.txt文件，它将包含512个ASCII码在35到96之间的字符. 
并且由于是随机生成的，所以每个人的私人密钥文件key.txt将是不一样的，下面是 
一个例子密钥文件：
IY/;$>=3)?^-+7M32#Q]VOII.Q=OFMC`:P7_B;<R/8U)XFHC<SR_E$.DLG'=I+@5%*+OP:F_=';' 
NSY`-^S.`AA=#T5LGK(=/<:+C2K/^7AI$;PU'OME2+T8ND?W$C(J\,;631'M-LD5F%%1 
TF_&K2A-D-54[2P,#'*JU%6`0RF3CMF0(#T07U'FZ=>#,+.AW_/+']DIB;2DTIA57TT&-)O'/*F' 
M>H.XH5W^0Y*=71+5*^`^PKJ(=E/X#7A:?,S>R&T;+B#<:-*\@)X9F`_`%QA3Z95.?_T#1,$2#FW 
W5PBH^*<])A(S0@AVD8C^Q0R^T1D?(1+,YE71X+.*+U$:3XO^Q].KG&0N0];[LJ<OZ6IN?7N4<GT 
L?(M'4S8+3JMK5]HC%^1^+K;\$WBXPA?F&5^E\D$7%*O/U[1/?8(5:1OVWV*1Z-%`:K&V?X1,1KU 
RD@3W0^D)<OG40?(VJ4EWL5A5M<$A);CQ36R9I]*U#Q%1<Y\&SA%#1<V 
下面再仔细分析一下上面的程序，我们发现其中的lowerbound和upperbound的数值 
其实就是你想使用来加密的ASCII字符范围。
后面一篇文章中将介绍如何使用这个密钥来加密和解密一个字符串 
Julain Sitkewich 
在第一部分，讨论了如何生成密钥，下面将介绍如何使用这个密钥来加密和解密一个 
字符串。
下面的代码就是能够同时实现这个功能的函数 
Crypt.asp文件 
<% 
Dim g_Key 
Const g_CryptThis = "Now is the time for all good men to come to the aid of their country." 
Const g_KeyLocation = "c:\key.txt" 
g_Key = mid(ReadKey网络File(g_KeyLocation),1,Len(g_CryptThis)) 
Response.Write "<p>ORIGINAL STRING: " & g_CryptThis & "<p>" 
Response.Write "<p>KEY VALUE: " & g_Key & "<p>" 
Response.Write "<p>ENCRYPTED CYPHERTEXT: " & EnCrypt(g_CryptThis) & "<p>" 
Response.Write "<p>DECRYPTED CYPHERTEXT: " & DeCrypt(EnCrypt(g_CryptThis)) & "<p>" 
Function EnCrypt(strCryptThis) 
Dim strChar,iKeyChar,iStringChar,i 
for i = 1 to Len(strCryptThis) 
iKeyChar = Asc(mid(g_Key,i,1)) 
iStringChar = Asc(mid(strCryptThis,i,1)) 
' *** uncomment below to encrypt with addition,
' iCryptChar = iStringChar + iKeyChar 
iCryptChar = iKeyChar Xor iStringChar 
strEncrypted = strEncrypted & Chr(iCryptChar) 
next 
EnCrypt = strEncrypted 
End Function 
Function DeCrypt(strEncrypted) 
Dim strChar,iKeyChar,iStringChar,i 
for i = 1 to Len(strEncrypted) 
iKeyChar = (Asc(mid(g_Key,i,1))) 
iStringChar = Asc(mid(strEncrypted,i,1)) 
' *** uncomment below to decrypt with subtraction 
' iDeCryptChar = iStringChar - iKeyChar 
iDeCryptChar = iKeyChar Xor iStringChar 
strDecrypted = strDecrypted & Chr(iDeCryptChar) 
next 
DeCrypt = strDecrypted 
End Function 
Function ReadKeyFromFile(strFileName) 
Dim keyFile,fso,f 
set fso = Server.CreateObject("Scripting.FileSystemObject") 
set f = fso.GetFile(strFileName) 
set ts = f.OpenAsTextStream(1,-2) 
Do While not ts.AtEndOfStream 
keyFile = keyFile & ts.ReadLine 
Loop 
ReadKeyFromFile = keyFile 
End Function 
%> 
在Crypt.asp中我们首先从密钥文件中得到密钥值，然后从这段密钥中截取和我们需要加密的明文同样长度的密钥。然后使用一个简单的异或操作将明文和密钥进行运算，那么得到的结果就是加密后的密文了。过程很简单的。由于是使用了异或操作，所以解密将非常简单，只要使用同样的密钥对密文再次进行异或操作就能够解密了。在上面介绍的基础上，你可以少加改动，就可以使用同样的方法加密一个文件。唯一需要注意的是，对于一个二进制文件，你需要做一些完整性检查以保证转换回来 
的字符不要越界。现在你需要做的就是把密钥保存在服务器上的一个安全的地方（不能够被外部访问） 
附注：
Vernam密码是由Gilbert Vernam (他是AT&T的工程师)在1918年发明的。这是一种使用异或方法进行加密解密的方法。ASP代码加密工具主要功能

概述
加密是以某种特殊的算法改变原有的信息数据，使得未授权的用户即使获得了已加密的信息，但因不知解密的方法，仍然无法了解信息的内容。
加密之所以安全，绝非因不知道加密解密算法方法，而是加密的密钥是绝对的隐藏，现在流行的RSA和AES加密算法都是完全公开的，一方取得已加密的数据，就算知到加密算法也好，若没有加密的密钥，也不能打开被加密保护的信息。单单隐蔽加密算法以保护信息，在学界和业界已有相当讨论，一般认为是不够安全的。公开的加密算法是给骇客和加密家长年累月攻击测试，对比隐蔽的加密算法要安全多。
在密码学中，加密是将明文信息隐匿起来，使之在缺少特殊信息时不可读。虽然加密作为通信保密的手段已经存在了几个世纪，但是只有那些对安全要求特别高的组织和个人才会使用它。在20世纪70年代中期，强加密（Strong Encryption）的使用开始从政府保密机构延伸至公共领域，并且目前已经成为保护许多广泛使用系统的方法，比如因特网电子商务、手机网络和银行自动取款机等. 
加密可以用于保证安全性，但是其它一些技术在保障通信安全方面仍然是必须的，尤其是关于数据完整性和信息验证；例如，信息验证码（MAC）或者数字签名。另一方面的考虑是为了应付流量分析。
加密或软件编码隐匿（Code Obfuscation）同时也在软件版权保护中用于对付反向工程，未授权的程序分析，破解和软件盗版及数位内容的数位版权管理（DRM）等。
在古代，加密是由许多办法完成的。在中国较“流行”使用淀粉水在纸上写字，再浸泡在碘水中使字浮现出来。而外国就不同了，最经典的莫过于伯罗奔尼撒战争。公元前405年，雅典和斯巴达之间的伯罗奔尼撒战争已进入尾声。斯巴达军队逐渐占据了优势地位，准备对雅典发动最后一击。这时，原来站在斯巴达一边的波斯帝国突然改变态度，停止了对斯巴达的援助，意图是使雅典和斯巴达在持续的战争中两败俱伤，以便从中渔利。在这种情况下，斯巴达急需摸清波斯帝国的具体行动计划，以便采取新的战略方针。正在这时，斯巴达军队捕获了一名从波斯帝国回雅典送信的雅典信使。斯巴达士兵仔细搜查这名信使，可搜查了好大一阵，除了从他身上搜出一条布满杂乱无章的希腊字母的普通腰带外，别无他获。情报究竟藏在什么地方呢？斯巴达军队统帅莱桑德把注意力集中到了那条腰带上，情报一定就在那些杂乱的字母之中。他反复琢磨研究这些天书似的文字，把腰带上的字母用各种方法重新排列组合，怎么也解不出来。最后，莱桑德失去了信心，他一边摆弄着那条腰带，一边思考着弄到情报的其他途径。当他无意中把腰带呈螺旋形缠绕在手中的剑鞘上时，奇迹出现了。原来腰带上那些杂乱无章的字母，竟组成了一段文字。这便是雅典间谍送回的一份情报，它告诉雅典，波斯军队准备在斯巴达军队发起最后攻击时，突然对斯巴达军队进行袭击。斯巴达军队根据这份情报马上改变了作战计划，先以迅雷不及掩耳之势攻击毫无防备的波斯军队，并一举将它击溃，解除了后顾之忧。随后，斯巴达军队回师征伐雅典，终于取得了战争的最后胜利。
雅典间谍送回的腰带情报，就是世界上最早的密码情报，具体运用方法是，通信双方首先约定密码解读规则，然后通信—方将腰带（或羊皮等其他东西）缠绕在约定长度和粗细的木棍上书写。收信—方接到后，如不把腰带缠绕在同样长度和粗细的木棍上，就只能看到一些毫无规则的字母。后来，这种密码通信方式在希腊广为流传。现代的密码电报，据说就是受了它的启发而发明的。
分类
加密建立在对信息进行数学编码和解码的基础上。加密类型分为两种，对称加密与非对称加密，对称加密双方采用共同密钥，（当然这个密钥是需要对外保密的），这里讲一下非对称加密，这种加密方式存在两个密钥，密钥 -- 一种是公共密钥（正如其名，这是一个可以公开的密钥值），一种是私人密钥（对外保密）。您发送信息给我们时，使用公共密钥加密信息。一旦我们收到您的加密信息，我们则使用私人密钥破译信息密码（被我们的公钥加密的信息，只有我们的唯一的私钥可以解密，这样，就在技术上保证了这封信只有我们才能解读——因为别人没有我们的私钥）。使用私人密钥加密的信息只能使用公共密钥解密（这一功能应用与数字签名领域，我的私钥加密的数据，只有我的公钥可以解读，具体内容参考数字签名的信息）反之亦然，以确保您的信息安全。
什么是加密技术
加密技术是最常用的安全保密手段，利用技术手段把重要的数据变为乱码（加密）传送，到达目的地后再用相同或不同的手段还原（解密）。
加密技术包括两个元素：算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字（密钥）结合，产生不可理解的密文的步骤，密钥是用来对数据进行编码和解密的一种算法。在安全保密中，可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。