用PowerBuilder制作随机密码生成器

软件世界

随着计算机信息系统在我们日常工作中的普及,各种各样的密码也成为我们操作计算机必不可少的一部分。但是在实际工作中,有相当一部分用户缺乏安全意识,经常使用姓名、生日日期、电话号码或手机号码等作为计算机信息系统的密码,这样设置的密码往往是不符合密码设置规范的,容易被破译,这样你所使用计算机信息系统就存在一定的安全隐患。
那么什么样的密码才能算做安全的密码呢?首先密码长度至少是6位长度,其次密码中必须包括大小写、数字字母,如果有标点符号或控制符则更加安全,最后就是密码不要代表任何实际含义。比如说:e8B3Z6v0或者fa2L6mwN这样的密码都是比较安全的。另外定期对密码进行更换也是保证系统安全的重要策略。
本人用Power Builder制作了一个随机密码生成器,通过该软件可以随机生成符合密码设置规范的口令,用户只要选择一个作为自己的口令即可。下面介绍一下随机密码生成器的设计方法:

1.创建应用程序

在Power Builder 7.0中新建一个application,命名为random_password,在其open事件中加入一行代码:open(w_password),作用是打开主窗口;

2.创建主窗口

在Power Builder 7.0中新建一个window,命名为w_password,其title定义为“随机密码生成器”,在该窗口上添加如下控件:命令按钮cb_1(cb_1.text=""随机生成"")、cb_2(cb_2.text=""关闭"")、cb_3(cb_3.text=""帮助""),单行编辑框sle_1,复选框cbx_1(cbx_1.text=""小写字母a~z"")、cbx_2(cbx_2.text=""大写字母A~Z""),编辑掩码控件em_1(数值型,在6-20之间取值)。

3.编写代码

(1)在主窗口w_password中声明如下instance 变量:
char daxie[26]={""A"",""B"",""C"",""D"",""E"",""F"",""G"",""H"",""I"",""J"",""K"",""L"",""M"",""N"",""O"",""P"",""Q"",""R"",""S"",""T"",""U"",""V"",""W"",""X"",""Y"",""Z""}//大写字母
char xiaoxie[26]={""a"",""b"",""c"",""d"",""e"",""f"",""g"",""h"",""i"",""j"",""k"",""l"",""m"",""n"",""o"",""p"",""q"",""r"",""s"",""t"",""u"",""v"",""w"",""x"",""y"",""z""}//小写字母
char shuzi[10]={""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""0""}//数字
char char_pass1[10],char_pass2[36],char_pass3[36],char_pass4[62]//定义密码可能取值的字符数组
(2)在w_password窗口的open事件中加入如下代码:
int li_loop//定义循环变量
//密码取值范围只是数字
for li_loop=1 to 10
char_pass1[li_loop]=shuzi[li_loop]
next
//密码取值范围是数字+小写字母
for li_loop=1 to 10
char_pass2[li_loop]=shuzi[li_loop]
next
for li_loop=1 to 26
char_pass2[10+li_loop]=xiaoxie[li_loop]
next
//密码取值范围是数字+大写字母
for li_loop=1 to 10
char_pass3[li_loop]=shuzi[li_loop]
next
for li_loop=1 to 26
char_pass3[10+li_loop]=daxie[li_loop]
next
//密码取值范围是数字+小写字母+大写字母
for li_loop=1 to 10
char_pass4[li_loop]=shuzi[li_loop]
next
for li_loop=1 to 26
char_pass4[10+li_loop]=xiaoxie[li_loop]
next
for li_loop=1 to 26
char_pass4[36+li_loop]=daxie[li_loop]
next
Randomize (0)//初始化伪随机数发生器,使其生成不可重复的伪随机数序列
(3)在命令按钮cb_1的clicked事件中加入如下代码:
int pass_len,li_loop,li_array_len//定义密码长度、循环变量、密码取值数组长度变量
char pass_base[]//定义密码
pass_len=integer(em_1.text)
if pass_len<6 or pass_len>20 then
messagebox(""对不起"",""密码长度请限定在6位-20位之间!"")
em_1.setfocus()
return
end if
sle_1.text=""""
if not cbx_1.checked and not cbx_2.checked then//密码取值范围只是数字
li_array_len=10
for li_loop=1 to li_array_len
pass_base[li_loop]=char_pass1[li_loop]
next
end if
if cbx_1.checked and not cbx_2.checked then//密码取值范围是数字+小写字母
li_array_len=36
for li_loop=1 to li_array_len
pass_base[li_loop]=char_pass2[li_loop]
next
end if
if not cbx_1.checked and cbx_2.checked then//密码取值范围是数字+大写字母
li_array_len=36
for li_loop=1 to li_array_len
pass_base[li_loop]=char_pass3[li_loop]
next
end if
if cbx_1.checked and cbx_2.checked then//密码取值范围是数字+小写字母+大写字母
li_array_len=62
for li_loop=1 to li_array_len
pass_base[li_loop]=char_pass4[li_loop]
next
end if
for li_loop=1 to pass_len//根据用户定义密码长度生成随机密码序列
sle_1.text=sle_1.text+pass_base[rand(li_array_len)]
next
实际运行时,用户只要选择密码长度和密码取值范围,然后点击“随机生成”按钮即可在单行编辑框中生成一个符合密码设置规范的口令。目前,本人所在单位的一些比较重要的系统和重要网络设备的口令均由该软件随机生成,系统安全性大大提高。
注:该软件用Power Builder 7.0编写,在Windows 9X/2000下测试通过。