随着个人数据保护意识的加强,编程人员都希望通过采用加密算法来增强所开发应用程序功能。这不仅需要每个编程人员都要掌握加密算法及其编程技巧,导致整个应用程序开发难度加大,同时也极大地增加了编程的工作量。基于此问题,我们探讨了在VB6.0中创建Actlve控件功能,设计与实现了一个基于对称加密算法与非对称加密算法通用加密控件,只要将控件嵌入编程环境,即可达到不用编写加密代码,而实现加密功能。
一、DES加密算法和RSA加密算法简介
DES加密算法通过密钥对64位的二进制信息进行加密,把明文的64位信息加密成密文的64位信息。由于DES加密算法是公开的,所以加密强度取决于密钥的保密程度,加密后的信息可用加密时所用的同一密钥通过求逆变换还原成对应的明文。
RSA加密算法的加密密钥叫做公开密钥,解密密钥叫做私人密钥。RSA的密钥生成是这样的:先找出p、q、r三个数,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数,p、q、r这三个数便是私人密钥。进一步再找数m,使得rm==l mod (p-1) (q-1).这个m一定存在,因为r与(p-1)(q-1)互质,用辗转相除法可以求得,最后计算n= pq,m,n这两个数便是公开密钥。
二、含有DES和RSA两种加密算法的控件的设计与实现
在各类不同的加密算法中,DES加密算法和RSA加密算法是最具影响力的两种加密算法,如果在控件中能同时嵌入DES和RSA两种加密算法,则可以更有效地抵抗各种密码攻击,提高保密程度。在制作控件时,首先需要把含两种加密算法的VB程序在标准EXE工程中调试成功,其中最重要的是每种算法在VB中的程序实现。
1、DES加密算法在vb6.0的编程实现
DES加密算法数据流程的具体框架是不固定的,其一次迭代的具体流程可如下图所示。
本加密算法的编程实现首先要进行文件二进制形式的转化,因为DES加密算法就是对二进制形式进行加密处理的。数据处理前还必须解决密钥表的生成实现,而在加密运算中,乘积变换和模2运算的实现是比较困难的。
转化文件为二迸制形式的部分程序:
生成密钥表的部分程序:
ByteZBin函数将字符串转为二进制数组
乘积变换实现的部分程序:
2、RSA加密算法在vb6.0的编程实现
RSA加密算法的实现主要是公钥和私钥的随机生成,明文就是在此基础上的取模运算,算法流程如图所示。
随机生成公钥和私钥的部分程序:
其中IsPrlme()函数是验证参数是否为素数。Euler()函数是利用公式求另一密钥,Mult0函数是验证sk或pk是否与pq为互素。
在靠文件一菜单“新建工程”选项中,选择“ActiveX控件”,对弹出的名为Usercontrol设计窗口进行操作来建立ActiveX控件.先对已完成的标准EXE工程中的对象和代码进行复制,再编写UserControl的触发事件Initialize,然后对控件进行测试.为了能在设计中同时测试控件,需增加一个搿标准EXE"工程。在添加工程中建立一个标准EXE工程,与ActlveX工程组成一个工程组,将测试工程名设为TestProj ect.并把TestPrqject工程设为启动工程。此时,工具箱上就增加了一个名为UserControll的控件,最后生成相应的ocx文件。
信息保护已越来越受到人们的重视,很多应用程序的开发都需要设计加密功能。本设计含有RSA和DES加密算法的ActiveX控件可以在多种编程环境中直接加载引用,便捷地建立了高可靠性的加密保护,很好地解决了应用程序开发时加密算法设计和加密代码需重复编写的问题。
ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。
1.将数学表达式写成VisualBasic表达式,正确的是()
2.在VisualBasic中,若要将窗体中某个命令按钮设置成无效状态,应对该按钮的
3.执行如下VisualBasic程序段时,出现了如下图所示的错误:
引发此错误的语句可能为()
某同学正编写一个判断两数大小的程序,其窗体和代码窗口如下图所示:
根据代码窗口中的程序,要在程序运行时判断两数的大小,窗体上必须增加的对象是()
若程序要实现“求100内能被3整数的自然数个数”的功能,则方框中正确的语句是()
执行程序后,a的值范围是()
8.某同学正编写一个判断两数大小的程序,其窗体和代码窗口如下图所示:
根据代码窗口中的程序,要在程序运行时判断两数的大小,窗体上必须增加的对象是
9.下列VisualBasic程序段中,能实现输出变量a、b、c三个数中最大数的是()
该程序运行后,要文本框Text1中显示的是()
12.在VisualBasic中,下列语句定义的数组元素为10个的是()
从图中可以看出,当前正在编辑的是()
d1的Click事件过程代码1的Timer事件过程代码
1的Click事件过程代码1的Click事件过程代码
14.在VisualBasic中,下列能作为变量名的是()
15.已知字符A~Z的ASCII码值分别对应65~90。小明编写了一个在标签Label1上
显示26个英文大写字母“ABCDE……XYZ”的VB程序。部分程序如下:
方框中正确的语句是()
功能相同的程序段是()
18.某同学正编写一个判断酒驾行为的VisualBasic程序,其窗体和代码窗口如下图所示。
根据代码窗口中的程序,要在程序运行时获取输入的x值,窗体上必须增加的对象是()
运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,此时程序正执行
该程序运行后,i的值为()
21.在VisualBasic中,某对象的属性窗口如图所示:
该程序运行后,变量a(j)中存储的是
运行程序,单击命令按钮Command1后弹出如图所示的出错信息提示,引起该错误的语
该程序运行后,变量s的值是()
28.小金编写了一个统计随机数分布的VB程序,部分程序如下所示,在调试程序的时
候出现如右图所示的错误信息:
小金仔细分析该程序段后,发现其中缺少了()
29.有如下VB程序:
运行该程序,分别在文本框Text1、Text2中输入5、9,单击命令按钮Command1后,
文本框Text3中显示的内容是()
30.如右图所示的VB程序中,输入以下程序代码,运行后单击命令按钮Command1,出
现错误的提示图是:()
31.若x表示能被3整除的正整数,则下面逻辑表达式的值一定为真的是:()
32.、为使下面左右框内的VB程序段实现相同的功能,则左框内划线处填写的代码应
表达式S=Int(Rnd()*),则S的取值范围是()
34.下表记录了6个数据的排序过程。分析表中数据可知,该排序采用的算法与排序方
A.冒泡排序,升序B.选择排序,升序
C.冒泡排序,降序D.选择排序,降序
35.阶乘是基斯顿﹒卡曼于1808年发明的运算符号。正整数n的阶乘为n!=1×2×3…
×n。小王编写了如下VB程序用来求S=1!+2!+3!+…+10!。
36.下列逻辑表达式中,值为False的是()
37.有100个大小形状一样的透明玻璃球,其中有1个玻璃球的重量轻于其他99个玻
璃球,小明想利用一台无砝码的天平,运用合理的算法保证一定能出这颗轻玻璃球的最少
38.下列VB程序中,f是一个递归函数:
程序运行时,在文本框中输入8,单击命令按钮Command1后,Label1中显示的内容是:
行排序,则第二轮交换数据后的顺序是()
40.某高校学籍管理系统软件有2万个学生的电子档案(已按学籍号排序),假设从中
取出一条记录并与待查项进行比较所花时间为8毫秒,则用对分法在该系统中查任意一位
最多花费的时间约为()
A.16万毫秒B.8万毫秒C.10毫秒D.120毫秒
二、程序填空题(学考部分)
1.编写一个具有下列功能的VB程序:单击“分类”按钮Command1,随机产生10个[10,
99]区间中的整数,并将其中3的倍数显示在List1中,余下的数显示在List2中。运行界
(1)要使命令按钮Command1上显示的文本为“分类”,可在其属性窗口中将
属性的属性值改为“分类”。
(2)为实现上述功能,请在划线处填写合适的代码。
2.小丁想买几张6+1,选号时,他希望前4位用自己的生日:11月8日,即1108,
特别号码他选了买日子的个位数5,并且他希望前六个数字组成的数能被他的幸运数字
9整除。他的好朋友小杰帮他设计了一个VB程序,可以提供一份符合这些要求的号码清单
供他挑选。相应的界面如第12题图-1所示。阅读程序并完成后面的问题。
(1)设计应用程序界面时,为添加a所指向的对象,应使用图所示的“控件工具箱”
中的(填写相应编号);在第14题-3图所示的“属性窗口”中,将属
性值设置为“开始”,可使2中b所指向的对象显示“开始”。
(2)请根据题意将下列程序补充完整。
3.小李想用vb制作一个分钟倒计时器,界面如图所示。先在文本框text1中输入分钟
数,然后在文本框text2中输入秒钟数,再点击“开始倒计时”按钮开始倒计时。Vb程序
4.小沈很久没登录自己的了,这次他想给远方的朋友发封,但是密
码忘记了,请你帮她尽可能回密码。她零星记得自己的密码信息如下:
①共八位字符,前两位为字母“zj”,后六位是数字,并以66开头(即密码格式为
③后六位数能被16和46同时整除。
单击“回密码”按钮(Command1)后,可能的密码显示在列表框List1中。
'(选填字母,从下列A、B、C、D四个选项中选取一项)
If②Then'(选填字母,从下列A、B、C、D四个选项中选取
c=③'(填程序代码)
(1)解决此问题的算法是_______________。(选填:枚举算法/解析算法/查算法)
(2)程序中①划线处应填入__________;程序中②划线处应填入_________。
划线①、②处的选项:()
5.小兰设计了一个“猜价格”小游戏,用户在Text1中输入所猜的价格,单击“猜一猜”
按钮,如果偏高了,Label4标签中将提示“对不起,偏高了!”;若所猜的价格偏低,则Label4
标签中将提示“对不起,偏低了!”;若猜中,则Label4标签中将显示“恭喜你,猜对啦!”。
(1)应用程序界面设计时,为添加“请输入您猜的价格:”对象,应使用图所示的“控
件工具箱”中的(填写相应字母),并在图所示的“属性窗口”中,将属性
值设置为“请输入您猜的价格:”。
(2)解决此问题的相应程序如下,请根据题意将程序补充完整。
p=99'预设价格的值存储到p变量中
="对不起,偏高了!"
n="对不起,偏低了!"
n="恭喜你,猜对啦!"
6.十进制数转二进制数程序界面如第14题-1图所示,相关VB程序运行时,单击命令
按钮Command1后,执行十进制数转二进制数并输出显示的程序。
(1)应用程序界面设计。转换得到的二进制数将显示在Label3中,请根据第14题-3
图提供信息,确定使用第14题-2图控件工具箱中的(填写相应编号),修改属
(2)解决此问题的相应程序如下,请根据相应注释及题意将程序补充完整。
‘不停除2到商为0为止,所得余数倒推
7.以下VB程序段的功能是用DO语句求1~1000之间满足“用3除余2,用5除余3,用
7除余2”的数。并将结果在list1中列出,并在label1处显示符合条件的数的个数。
9.用VB软件编写判断闰年的年份。界面如第11题-图1所示,文本框Text1输入年份,
单击“判断”按钮Command1,在文本框Text2中输出判断结果(闰年的判断条件是:能被4
整除但是不能被100整除;或者能被四百整除)。
(1)应用程序界面设计时,Text1文本框内没有内容显示,这是由于将其属性名为
___________的值设置为空,窗口显示“闰年判断”是将窗体属性名为___________
的值设置成了“闰年判断”。(1分,1分)
(2)请根据题意将下列程序补充完整。(2分)
为实现上述功能,程序①加框处应填写为________________
10.编写VB程序,实现如下功能:在文本框Text1中输入骑士奔跑的速度值(为1到
10之间的整数),单击“奔跑”按钮Command1,骑士以相应的速度从左往右循环奔跑,单击
“停止”按钮Command2,骑士停止奔跑。界面如第14题-1图所示。
(1)在设计应用程序界面时,应使用第14题-2图所示“控件工具箱”中的(填
写相应编号)添加用于输入文字“加减速(1到10)”的控件。
(2)为实现上述功能,请在划线处填入合适代码。
三、程序填空题(选考部分)
1.【加试题】编写VB程序,在如第16题-1图所示1×1的正方形区域内产生一定数
量、位置随机的点坐标,统计位于0.5×0.5的黑区域内(包括边界)点的数量。程序运
行时界面如第16题-2图所示。
自上而下两个文本框的名称分别是Text1和Text2,“开始”按钮的名称是Command1。
中输入数据,单击“开始”按钮,在Text2中显示统计
结果。“开始”按钮单击事件处理过程的流程图如右图所示。
请根据流程图将下列程序补充完整。
x=Rnd′随机产生x坐标,0≤x<1
y=Rnd′随机产生y坐标,0≤y<1
2.【加试题】求孪生素数。孪生素数是指两个相邻奇数且都是素数,由于它们是最近的
素数,就像孪生兄弟一样。下列VisualBasic程序用于查100以内的所有孪生素数,其
中函数f用于判断一个数是否是素数,程序运行界面如图(第17题-1图)所示,Command1
鼠标单击事件过程的流程图如图(第17题-2图)所示。
'自定义函数f,返回值为逻辑
(1)程序中加框部分的算法是(选填:解析算法/枚举算法)(2分)
(2)在程序①、②、③划线处,填入适当的语句或表达式,把程序补充完整:
程序中①划线处应填入(1分)
程序中②划线处应填入(1分)
程序中③划线处应填入(1分)
3.小王设计了一个程序来列举仁川亚运会奖牌前三的国家。下列VB程序实现如下功
能:单击命令按钮Command1后,在列表框List1中按奖牌数由多到少显示国家名称,如图。
请根据算法将下列程序补充完
4.[加试题]王五为学生们设计了学校食堂学生校园卡查询系统,在终端机上输入学生的
校园卡卡号,可以查出该卡对应的学生姓名及相应的余额。
校园卡信息存储在一个综合的数据库“”,其中的“Yue”数据表用来存储学
生的校园卡基本信息,包括学号(num)、姓名(name)、余额(money),括号内的为对应字
段名。下列VB程序用来实现根据学号查询并显示学生姓名及余额,运行界面如下图所示:
数据库文件与应用程序在
同一文件夹中,在文本框Text1
中输入学生的学号,单击“查询”按钮,在标签Label4、Label5中分别显示学生姓名和余
Msgbox”你输入的学号不存在!”
为了实现上述目标,在画线处填入合适的语句或表达式:
5.【加试题】运行下列VB程序,在文本框Text1中输入30,界面如题图所示。
单击“计算”按钮Command1后,则在文本框Text2中显示的内容是(1)(2分),
在文本框Text3中显示的内容是(2)(2分)。
6.小张同学设计一个“简单数据筛选”程序。程序启动时运行界面如图所示。程序运行
时列表框List1中产生15个随机整数。在文本框Text1中输入筛选条件(大于或小于某个
数)后单击“筛选”按钮Command1,右边列表框List2中显示符合筛选条件的数据,同时
标签Label2上显示符合条件的数据个数。
实现上述功能的VB程序如下,但加框处代码有错误,请改正。
DimfAsString'f存放筛选天健的符号部分:大于号或者小于号
7.【加试题】某社区进行“摘葡萄”比赛活动,最后取十人进入决赛,工作人员编制了如
下VisualBasic程序,功能是根据葡萄串数进行排序,程序中所有参赛者的成绩保存在数
组m中,对应的姓名保存在数组name中。
程序运行界面如第17题图所示,左边列表框List1中显示数据(成绩和姓名),单击“开
始排序”按钮(Command1),排序后的结果按成绩从高到低显示在列表框List2中。
解决此问题的排序部分的程序段如下:
'此过程用于对数组a和数组b进行初始赋值,代码略
在程序①和②划线处,填入适当的语句或表达式,把程序补充完整:
(1)程序中①划线处应填入。
(2)程序中②划线处应填入。
8.【加试题】某单位会员储值卡查询系统具有如下功能:输入会员卡号,即可查出该
卡号对应的余额。所有会员卡号和相应的余额已分别保存在数组kh和数组ye中,第i个会
员的卡号保存在kh(i)中,对应卡号的余额保存在ye(i)中,卡号从小到大排序。
程序运行界面如第18题图所示,左边列表框List1中显示的是会员卡号和余额,在文本框
Text1中输入会员卡号,单击"查询余额"按钮(Command1)后,如果到此卡号,则在标签
Label2中显示"此卡号余额为"和卡号对应的余额值,如果未到则显示"不到此卡号,请
解决此问题的部分程序段如下:
’此过程用于对数组kh和数组ye进行初始赋值,代码略
(1)程序中①划线处应填入。
(2)程序中②划线处应填入。
(3)程序中③划线处应填入。
n="不到此卡号,请重新输入"
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。