王朝百科
分享
 
 
 

asp加密

王朝百科·作者佚名  2009-10-24  
宽屏版  字体: |||超大  

简介

首先简单介绍一下有关加密的背景。由于美国禁止几种密码算法的对外出口的

加密位数(例如SSL的40位加密限制),本文将介绍一种ASP可以使用的简单字符加密算法,

而不是那些受限制的加密算法。其实,这里介绍的加密算法对于一般的运用来说已经足够

解密人麻烦一阵子的了。它的加密基础是最简单的Vernum密码方法,我将在下一篇文章中

介绍这种密码。

它的基本原理是,需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后

使用这两个文件组合起来生成密文。

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

所以本文介绍的是生成密钥的代码。我们假设我们生成的密钥为512位长的密钥,

它已经足够来加密一个文本字符了。代码如下:

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=BJ3M0.WF#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^ED$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 ReadKey网络File(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

ReadKey网络File = keyFile

End Function

%>

在Crypt.asp中我们首先从密钥文件中得到密钥值,然后从这段密钥中

截取和我们需要加密的明文同样长度的密钥。然后使用一个简单的异或操作

将明文和密钥进行运算,那么得到的结果就是加密后的密文了。过程很简单的。

由于是使用了异或操作,所以解密将非常简单,只要使用同样的密钥对密文

再次进行异或操作就能够解密了。

在上面介绍的基础上,你可以少加改动,就可以使用同样的方法加密一个文件。

唯一需要注意的是,对于一个二进制文件,你需要做一些完整性检查以保证转换回来

的字符不要越界。

现在你需要做的就是把密钥保存在服务器上的一个安全的地方(不能够被外部访问)

附注:

Vernam密码是由Gilbert Vernam (他是AT&T的工程师)在1918年发明的。

这是一种使用异或方法进行加密解密的方法。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有