深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

使用ASP加密算法加密你的数据(二)


March 25,2004
在第一部分,讨论了如何生成密钥,下面将介绍如何使用这个密钥来加密和解密一个
    字符串。
    下面的代码就是能够同时实现这个功能的函数
    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(ReadKeyFromFile(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年发明的。
    这是一种使用异或方法进行加密解密的方法。
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved