大家好,很高兴来到编程爱好者论坛,下面是我在北大青鸟学到的关于ASP版权的保护问题,希望对大家有所帮助。

现在的软件加密很多都采用了计算机本身硬件的一些信息做为加密码。比如硬盘序列号、CPU编号、网卡的物理地址.....等等。由于ASP本身的限制,使我们的代码很容易的被盗取,一些商业版本得不到保护,这使我们ASP程序员十分头疼。我们能不能像软件一样,给ASP代码做一个防盗装置呢?先听听我的想法,这个想法还不是十分完善,希望能通过它抛砖引玉,能有更多的爱好者加入。 首先,我们可以通过代码查询出一些硬件的基本信息,做为以为需要验证的标识。我举两个例子吧,通过磁盘的序列号的方法。因为它是系统对磁盘进行格式化时随机产生的一个磁盘标识信息,也叫做卷序列号。同一台机器两次格式化产生的序列号相同的几率很小,几乎为零。使用它应该很安全。 获取磁盘卷序列号可以通过以下代码: Set fs = server.createobject("scripting.filesystemobject") Drive = Server.mappath("index.asp") Drive = left(Drive,3) Set f = Fs.getdrive(Drive) Drive_number = mid(trim(f.serialnumber),2,len(trim(f.serialnumber))-1) 得到的Drive_number就是磁盘卷列号了。 当然,我们也可以得到网卡的物理地址(MAC)来做为验证标识,获取的代码如下: strMac = GetMACAddress(Request.ServerVariables("REMOTE_ADDR")) Function GetMACAddress(strIP) Set net = Server.CreateObject("wscript.network") Set sh = Server.CreateObject("wscript.shell") sh.run "%comspec% /c nbtstat -A " & strIP & " > c:\" & strIP & ".txt",0,true Set sh = nothing Set fso = createobject("scripting.filesystemobject") Set ts = fso.opentextfile("c:\" & strIP & ".txt") macaddress = null Do While Not ts.AtEndOfStream data = ucase(trim(ts.readline)) If instr(data,"MAC ADDRESS") Then macaddress = trim(split(data,"=")(1)) Exit Do End If loop ts.close Set ts = nothing fso.deletefile "c:\" & strIP & ".txt" Set fso = nothing GetMACAddress = macaddress End Function 得到的strMac变量就是记录着网卡的MAC值了。 OK,现在已经得到了两项硬件的信息,剩下来关键的一步就是怎么使用这些信息来保护你的ASP代码了。呵呵.....可能有朋友已经想到了。对,我们可以把它保存到数据库中,或者一些关键的,必须使用的ASP文件中。比如在用户访问的第一个页面中,读一下数据库中保存的验证标识,然后存入SESSION中,接着在每一个页面中都判断一下是否SESSION中的值相同,如果不相同就为盗版。 这是一个基本的思路,我们需要扩展开的是,怎么保护这些ASP代码。OK,可以试试使用自已的加密算法(可以参考一下我之前的一篇文章)把标识写到数据库中,然后读出来。或者加密ACCESS。如果使用SQL SERVER的话,可以写到存储过程中,然后加密存储过程。也可以写成DLL,来进行调用。呵,呵.......大家来探讨一下。 也许我该考虑写一个完整的文章,做到每一步。但是我觉得目前写到这一步是够了,我们要的是方法,而不是代码。这不是学习的目的。 最后感谢给我完成这篇文章启发的人。

 本文转载自:[url=http://www.beidaqingniao.org]http://www.beidaqingniao.org[/url]