LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2010年5月8日 14:49 本文热度 7066
[p] 简介 [br] 首先简单介绍一下有关加密的背景。由于美国禁止几种密码算法的对外出口的加密位数(例如ssl的40位加密限制),本文将介绍一种asp可以使用的简单字符加密算法,而不是那些受限制的加密算法。其实,这里介绍的加密算法对于一般的运用来说已经足够解密人麻烦一阵子的了。它的加密基础是最简单的vernum密码方法,它的基本原理是,需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后使用这两个文件组合起来生成密文。[br] (明文) 组合 (密钥) = 加密后的密文[br] 所以本文介绍的是生成密钥的代码。我们假设我们生成的密钥为512位长的密钥,它已经足够来加密一个文本字符了。代码如下:[br] keygen.asp文件[br] <% [br] '****************************** [br] ' keygen.asp [br] '****************************** [br] const g_keylocation = "c:\key.txt" [br] const g_keylen = 512 [br] on error resume next [br] call writekeytofile(keygen(g_keylen),g_keylocation) [br] if err <> 0 then [br] response.write "error generating key." & "

" [br] response.write err.number & " [br] " [br] response.write err.description & " [br] " [br] else [br] response.write "key successfully generated." [br] end if [br] sub writekeytofile(mykeystring,strfilename) [br] dim keyfile, fso [br] set fso = server.createobject("scripting.filesystemobject") [br] set keyfile = fso.createtextfile(strfilename, true) [br] keyfile.writeline(mykeystring) [br] keyfile.close [br] end sub [br] function keygen(ikeylength) [br] dim k, icount, strmykey [br] lowerbound = 35 [br] upperbound = 96 [br] randomize ' initialize random-number generator. [br] for i = 1 to ikeylength [br] s = 255 [br] k = int(((upperbound - lowerbound) + 1) * rnd + lowerbound) [br] strmykey = strmykey & chr(k) & "" [br] next [br] keygen = strmykey [br] end function [br] %>[br]在iis下运行上面的keygen.asp页面。你只需要如此做一次,他将把密钥写入文件 c:\key.txt中 (如果你愿意的话,你也可以把这个文件放到另外一个更加安全的地方)。然后你可以打开这个key.txt文件,它将包含512个ascii码在35到96之间的字符。并且由于是随机生成的,所以每个人的私人密钥文件key.txt将是不一样的,下面是一个例子密钥文件: [br] iy/;$>=3)?^-+7m32#q]voii.q=ofmc`:p7_b;#,+.aw_/+']dib;2dtia57tt&-)o'/*f' [br] m>h.xh5w^0y*=71+5*^`^pkj(=e/x#7a:?,s>r&t;+b#<:-*\@)x9f`_`%qa3z95.?_t#1,$2#fw [br] w5pbh^*<])a(s0@avd8c^q0r^t1d?(1+,ye71x+.*+u$:3xo^q].kg&0n0];[lj [p] 上面讨论了如何生成密钥,下面将介绍如何使用这个密钥来加密和解密一个字符串。 [br] 下面的代码就是能够同时实现这个功能的函数 [br] crypt.asp文件 [br] <% [br] dim g_key [br] const g_cryptthis = "now is the time for all good men to come to the aid of their country." [br] const g_keylocation = "c:\key.txt" [br] g_key = mid(readkeyfromfile(g_keylocation),1,len(g_cryptthis)) [br] response.write "

original string: " & g_cryptthis & "

" [br] response.write "

key value: " & g_key & "

" [br] response.write "

encrypted cyphertext: " & encrypt(g_cryptthis) & "

" [br] response.write "

decrypted cyphertext: " & decrypt(encrypt(g_cryptthis)) & "

" [br] function encrypt(strcryptthis) [br] dim strchar, ikeychar, istringchar, i [br] for i = 1 to len(strcryptthis) [br] ikeychar = asc(mid(g_key,i,1)) [br] istringchar = asc(mid(strcryptthis,i,1)) [br] ' *** uncomment below to encrypt with addition, [br] ' icryptchar = istringchar + ikeychar [br] icryptchar = ikeychar xor istringchar [br] strencrypted = strencrypted & chr(icryptchar) [br] next [br] encrypt = strencrypted [br] end function [br] function decrypt(strencrypted) [br] dim strchar, ikeychar, istringchar, i [br] for i = 1 to len(strencrypted) [br] ikeychar = (asc(mid(g_key,i,1))) [br] istringchar = asc(mid(strencrypted,i,1)) [br] ' *** uncomment below to decrypt with subtraction [br] ' idecryptchar = istringchar - ikeychar [br] idecryptchar = ikeychar xor istringchar [br] strdecrypted = strdecrypted & chr(idecryptchar) [br] next [br] decrypt = strdecrypted [br] end function [br] function readkeyfromfile(strfilename) [br] dim keyfile, fso, f [br] set fso = server.createobject("scripting.filesystemobject") [br] set f = fso.getfile(strfilename) [br] set ts = f.openastextstream(1, -2) [br] do while not ts.atendofstream [br] keyfile = keyfile & ts.readline [br] loop [br] readkeyfromfile = keyfile [br] end function [br] %> [br] 在crypt.asp中我们首先从密钥文件中得到密钥值,然后从这段密钥中截取和我们需要加密的明文同样长度的密钥。然后使用一个简单的异或操作将明文和密钥进行运算,那么得到的结果就是加密后的密文了。过程很简单的。 [br] 由于是使用了异或操作,所以解密将非常简单,只要使用同样的密钥对密文再次进行异或操作就能够解密了。[br] 在上面介绍的基础上,你可以少加改动,就可以使用同样的方法加密一个文件。[br] 唯一需要注意的是,对于一个二进制文件,你需要做一些完整性检查以保证转换回来的字符不要越界。[br] 现在你需要做的就是把密钥保存在服务器上的一个安全的地方(不能够被外部访问)[br] 附注: [br] vernam密码是由gilbert vernam (他是at&t的工程师)在1918年发明的。 [/p]


该文章在 2010/5/8 14:49:28 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved