asp

位置:IT落伍者 >> asp >> 浏览文章

使用ASP加密算法加密你的数据


发布日期:2022年03月26日
 
使用ASP加密算法加密你的数据

简介

首先简单介绍一下有关加密的背景由于美国禁止几种密码算法的对外出口的加密位数(例如SSL的位加密限制)本文将介绍一种ASP可以使用的简单字符加密算法而不是那些受限制的加密算法其实这里介绍的加密算法对于一般的运用来说已经足够解密人麻烦一阵子的了它的加密基础是最简单的Vernum密码方法我将在下一篇文章中介绍这种密码

它的基本原理是需要有一个需要加密的

明文和一个随机生成的解密钥匙文件然后使用这两个文件组合起来生成密文

(明文) 组合 (密钥) = 加密后的密文

所以本文介绍的是生成密钥的代码我们假设我们生成的密钥为位长的密钥它已经足够来加密一个文本字符了代码如下

KeyGeNasp文件

<%

******************************

KeyGeNasp

******************************

Const g_KeyLocation = C:\keytxt

Const g_KeyLen =

On Error Resume Next

Call WriteKeyToFile(KeyGeN(g_KeyLen)g_KeyLocation)

if Err <> Then

ResponseWrite ERROR GENERATING KEY & <P>

ResponseWrite ErrNumber & <BR>

ResponseWrite ErrDescription & <BR>

Else

ResponseWrite KEY SUCCESSFULLY GENERATED

End If

Sub WriteKeyToFile(MyKeyStringstrFileName)

Dim keyFile fso

set fso = ServerCreateObject(scriptingFileSystemObject)

set keyFile = fsoCreateTextFile(strFileName true)

keyFileWriteLine(MyKeyString)

keyFileClose

End Sub

Function KeyGeN(iKeyLength)

Dim k iCount strMyKey

lowerbound =

upperbound =

Randomize Initialize randomnumber generator

For I = to iKeyLength

s =

k = Int(((upperbound lowerbound) + ) * Rnd + lowerbound)

strMyKey = strMyKey & Chr(k) &

next

KeyGeN = strMyKey

End Function

%>

在IIS下运行上面的KeyGeNasp页面你只需要如此做一次他将把密钥写入文件c:\keytxt中 (如果你愿意的话你也可以把这个文件放到另外一个更加安全的地方)然后你可以打开这个keytxt文件它将包含个ASCII码在之间的字符并且由于是随机生成的所以每个人的私人密钥文件keytxt将是不一样的下面是一个例子密钥文件

IY/;$>=)?^+M#Q]VOIIQ=OFMC`:P_B;<R/U)XFHC

<SR_E$DLG=I+@%*+OP:F_=;NSY`^S`AA=BJM

WF#TLGK(=/<:+CK/^AI$;PUOME+TND?W$C(J\;

MLDF%%TF_&KAD[P#*JU%`RFCMF

(#TUFZ=>#+AW_/+]DIB;DTIATT&)O/*FM>

HXHW^Y*=+*^`^PKJ(=E/X#A:?S>R&T;+B#<:*

\@)XF`_`%QAZ?_T#$#FWWPBH^*<])A(

S@AVDC^QR^TD?(+YEX+*+U$:XO^Q]KG&N];

[LJ<OZIN?N<GTL?(MS+JMK]HC%^^+K;$WBXPA?F&^E\D$%*O/U[/?(:OVWV*Z%`:K&V?X

KURD@W^D)<OG?(VJEWLAM<$A);CQRI]*U#Q%

<Y\&SA%#<V

下面再仔细分析一下上面的程序我们发现其中的lowerbound和upperbound的数值其实就是你想使用来加密的ASCII字符范围后面一篇文章中将介绍如何使用这个密钥来加密和解密一个字符串

在第一部分讨论了如何生成密钥下面将介绍如何使用这个密钥来加密和解密一个字符串

下面的代码就是能够同时实现这个功能的函数

Cryptasp文件

<%

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:\keytxt

g_Key = mid(ReadKeyFromFile(g_KeyLocation)Len(g_CryptThis))

ResponseWrite <p>ORIGINAL STRING: & g_CryptThis & <p>

ResponseWrite <p>KEY value: & g_Key & <p>

ResponseWrite <p>ENCRYPTED CYPHERTEXT: & EnCrypt(g_CryptThis) & <p>

ResponseWrite <p>DECRYPTED CYPHERTEXT: & DeCrypt(EnCrypt(g_CryptThis)) & <p>

Function EnCrypt(strCryptThis)

Dim strChar iKeyChar iStringChar I

for I = to Len(strCryptThis)

iKeyChar = Asc(mid(g_KeyI))

iStringChar = Asc(mid(strCryptThisI))

 *** 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 = to Len(strEncrypted)

iKeyChar = (Asc(mid(g_KeyI)))

iStringChar = Asc(mid(strEncryptedI))

 *** 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 = ServerCreateObject(ScriptingFileSystemObject)

set f = fsoGetFile(strFileName)

set ts = fOpenAsTextStream( )

Do While not tsAtEndOfStream

keyFile = keyFile & tsReadLine

Loop

ReadKeyFromFile = keyFile

End Function

%>

在Cryptasp中我们首先从密钥文件中得到密钥值然后从这段密钥中截取和我们需要加密的明文同样长度的密钥然后使用一个简单的异或操作将明文和密钥进行运算那么得到的结果就是加密后的密文了过程很简单的由于是使用了异或操作所以解密将非常简单只要使用同样的密钥对密文再次进行异或操作就能够解密了在上面介绍的基础上你可以少加改动就可以使用同样的方法加密一个文件唯一需要注意的是对于一个二进制文件你需要做一些完整性检查以保证转换回来的字符不要越界现在你需要做的就是把密钥保存在服务器上的一个安全的地方(不能够被外部访问)               

上一篇:改进性能和样式的 24个 ASP 技巧(2)

下一篇:ASP开发中数据库文件调用的捷径