ace key with pas 检查密码的思路是:先到输入的文字框内取,再到口令库内查找,如果找不到,返回消息窗口“ 您不是指定用 户,请与
系统管理员联系!”,系统退出;如果找到了用户,则继续进行,把输入的口令和送到解密“ 过程” 中进行运算, 解密“ 过程” 将其解密,并与口令库内的数据进行比较,如果不正确,开始计数,要求重新输入密码,三次不正确,退出系统。如 果正确,释放当前窗口,进入系统。 主要代码如下:name=trim(ThisForm.Text1.value) if empty(name) a=messagebox ("请输入用户名!",0+48,"信息窗口") Th
isForm.Text1.setfocus return endif pass=trim(ThisForm.Text2.value) if empty(pass) a=messagebox ("请输入口令!",0+48,"信息窗口") ThisForm.Text2.setfocus
return endif use klk locate for klk.user_id=name if found()=.f. =messagebox ("你不是指定用户,请与系统管理员联系!",64,"提示信息") thisform.release else ok =Thisform.decode(pass) if ok=.t. ThisForm.Label3.caption="欢迎使用!" wait window ' 欢迎使用!按任意键进入“系统维护模块。”' release thisform do form wh_wh else if m=3 m=m+1 ThisForm.Label3.caption="口令错,您无权使用" a=messagebox ("对不起,您无权使用!",0+48,"信息窗口") release thisform else a=messagebox ("口令错,请重新输入!",0+48,"信息窗口") ThisForm.Text2.value="" ThisForm.Text2.setfocus m=m+1 endif endif endif
改变密码的思路是:首先读取用户,如果是新用户则请用户输入新密码,并记录下获得新密码的时间;如果是老用户,则读 取用户旧密码, 将旧密码进行解密运算并和口令库内容比较, 如果正确, 请用户输入新密码, 并将新密码通过解密运算存入口令库, 并记录修改时间。 主要代码如下:
name=ThisForm.Text3.value oldpass=ThisForm.Text1.value newpass=ThisForm.Text2.value if isblank(newpass) = messagebox("请重新输入新密码!",64,"信息提示") ThisForm.Text1.setfocus() return endif
success=thisform.decode(oldpass) if not success = messagebox ("旧密码不正确,重新输入密码!",64,"信息提示") ThisForm.Text1.setfocus() return endif locate for klk.user_id =name &;&;new user logo if found()=.f. =messagebox("您是新用户!",64,"信息提示") append blank replace klk.user_id with name,klk.logo_ddate with date() thisform.text3.setfocus endif thisform.Encode(newpass) = messagebox ("旧密码已经修改完成,下次请使用新密码!",64,"信息提示") ThisForm.Command2.setfocus return 注意,在改变密码的窗口(form) 中,要定义“ 加密过程” 和“ 解密过程”,方法如上所述。 以上是一个加密算法的主要思路和关键代码,其它部分读者可自行
设计。这个加密算法还可以进一步完善。如采用不同的函数进 行运算,加入日期,使每个人每天的密码都不一样( 加入时间的算法如前所述,利用 CDOW() 函数作为键值的一部分。)。
简单点,可以用 BITXOR()函数加密。下例中 123 是“密钥” ,^_^ cs="AS45W6GHU6" ct="" FOR i=1 TO LEN(cs) ch=SUBSTR(cs,i,1) chn=ASC(ch) ct=ct+CHR(BITXOR(chn,123)) endfor ?cs ?ct
给个最简单的“算法原理提示”你去发挥吧。。当然你也可以把他改成用“密钥”来加密,原理是一样的。当每一个字符都匹配相 。 应的“密钥”时,不知道“密钥”是解不开的。
cs="AS45W6GHU6" ct="" FOR i=1 TO LEN(cs) ch=SUBSTR(cs,i,1) DO CASE CASE ASC(ch)>=48 AND ASC(ch)<58 chn=ASC(ch)-48 ct=ct+CHR((9-chn)+48) CASE ASC(ch)>=65 AN
D ASC(ch)<91 chn=ASC(ch)-65 ct=ct+CHR((25-chn)+65) CASE ASC(ch)>=97 AND ASC(ch)<123 chn=ASC(ch)-98 ct=ct+CHR((25-chn)+