簡介 首先簡單介紹一下有關加密的背景
由於美國禁止幾種密碼算法的對外出口的加密位數(例如SSL的
位加密限制)
本文將介紹一種ASP可以使用的簡單字符加密算法
而不是那些受限制的加密算法
其實
這裡介紹的加密算法對於一般的運用來說已經足夠解密人麻煩一陣子的了
它的加密基礎是最簡單的Vernum密碼方法
我將在下一篇文章中介紹這種密碼
它的基本原理是
需要有一個需要加密的
明文和一個隨機生成的解密鑰匙文件
然後使用這兩個文件組合起來生成密文
(明文) 組合 (密鑰) = 加密後的密文
所以本文介紹的是生成密鑰的代碼
我們假設我們生成的密鑰為
位長的密鑰
它已經足夠來加密一個文本字符了
代碼如下
KeyGeN
asp文件
<%
******************************
KeyGeN
asp
******************************
Const g_KeyLocation =
C:\key
txt
Const g_KeyLen =
On Error Resume Next
Call WriteKeyToFile(KeyGeN(g_KeyLen)
g_KeyLocation)
if Err <>
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 =
upperbound =
Randomize
Initialize random
number generator
For I =
to iKeyLength
s =
k = Int(((upperbound
lowerbound) +
) * Rnd + lowerbound)
strMyKey = strMyKey & Chr(k) &
next
KeyGeN = strMyKey
End Function
%>
在IIS下運行上面的KeyGeN
asp頁面
你只需要如此做一次
他將把密鑰寫入文件c:\key
txt中 (如果你願意的話
你也可以把這個文件放到另外一個更加安全的地方)
然後你可以打開這個key
txt文件
它將包含
個ASCII碼在
到
之間的字符
並且由於是隨機生成的
所以每個人的私人密鑰文件key
txt將是不一樣的
下面是一個例子密鑰文件
IY/;$>=
)?^
+
M
#Q]VOII
Q=OFMC`:P
_B;<R/
U)XFHC
<SR_E$
DLG
=I+@
%*+OP:F_=
;
NSY`
^S
`AA=BJ
M
WF#T
LGK(=/<:+C
K/^
AI$;PU
OME
+T
ND?W$C(J\
;
M
LD
F%%
TF_&K
A
D
[
P
#
*JU%
`
RF
CMF
(#T
U
FZ=>#
+
AW_/+
]DIB;
DTIA
TT&
)O
/*F
M>
H
XH
W^
Y*=
+
*^`^PKJ(=E/X#
A:?
S>R&T;+B#<:
*
\@)X
F`_`%QA
Z
?_T#
$
#FWW
PBH^*<])A(
S
@AVD
C^Q
R^T
D?(
+
YE
X+
*+U$:
XO^Q]
KG&
N
];
[LJ<OZ
IN?
N
<GTL?(M
S
+
JMK
]HC%^
^+K;$WBXPA?F&
^E\D$
%*O/U[
/?
(
:
OVWV*
Z
%`:K&V?X
KURD@
W
^D)<OG
?(VJ
EWL
A
M<$A);CQ
R
I]*U#Q%
<Y\&SA%#
<V
下面再仔細分析一下上面的程序
我們發現其中的lowerbound和upperbound的數值其實就是你想使用來加密的ASCII字符范圍
後面一篇文章中將介紹如何使用這個密鑰來加密和解密一個字符串
在第一部分
討論了如何生成密鑰
下面將介紹如何使用這個密鑰來加密和解密一個字符串
下面的代碼就是能夠同時實現這個功能的函數
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)
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 =
to Len(strCryptThis)
iKeyChar = Asc(mid(g_Key
I
))
iStringChar = Asc(mid(strCryptThis
I
))
*** 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_Key
I
)))
iStringChar = Asc(mid(strEncrypted
I
))
*** 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(
)
Do While not ts
AtEndOfStream
keyFile = keyFile & ts
ReadLine
Loop
ReadKeyFromFile = keyFile
End Function
%>
在Crypt
asp中我們首先從密鑰文件中得到密鑰值
然後從這段密鑰中截取和我們需要加密的明文同樣長度的密鑰
然後使用一個簡單的異或操作將明文和密鑰進行運算
那麼得到的結果就是加密後的密文了
過程很簡單的
由於是使用了異或操作
所以解密將非常簡單
只要使用同樣的密鑰對密文再次進行異或操作就能夠解密了
在上面介紹的基礎上
你可以少加改動
就可以使用同樣的方法加密一個文件
唯一需要注意的是
對於一個二進制文件
你需要做一些完整性檢查以保證轉換回來的字符不要越界
現在你需要做的就是把密鑰保存在服務器上的一個安全的地方(不能夠被外部訪問)
From:http://tw.wingwit.com/Article/program/net/201311/12967.html