在美国国家信息交换码中,ASCII值从32到127是可以打印并显示的字符,把这96个字符随机调整次序,生成密码本。根据输入的密钥和明文,单击“加密”按钮Command1,输出密文。基本算法如下:
1)用数组mab分别记录1~96个字符的ASCII值,用数组zm记录对应字符在密码本中位置,如mab(9)=65,表示密码本中第9个字符是“A”,则对应的zm(65)=9;
2)把密钥中每个字符的ASCII值的各个数字进行累加(如Hi分别为(7+2)+(1+0+5)),将累加的和除以9取余数后加7,作为将密码本转换成二维表的列数;
3)每个明文在转换后二维表中位置作为密文,该位置是用十六进制表示的行号和列号。
程序运行的界面如下图所示:
实现上述功能的VB程序如下,请回答以下问题:
(1)
若输入密钥为“AB”,则根据算法及密码本,字母“A”加密后的密文是。
(2)
请在划线处填入合适的代码。
Dim Mab(96) As Integer '存储密码本中每个字符的ASCII值
Dim zm(127) As Integer '存储ASCII值32至127的字符在密码本数组mab中的下标
Private Sub Form_Load()
'产生密码本及96个字符在密码本中位置,代码略。
End Sub
Function p(s As String) As Integer
Dim i As
Integer, t1 As Long
Dim sum As
Integer, s1 As String
t1=0
i=1
Do While i<=Len(s)
s1=Mid(s,
i, 1)
t1=Asc(s1)
i=i+1
Loop
p=sum Mod 9+7
End Function
Private Sub Command1_Click()
Dim i As
Integer, t As Integer, hang As Integer
Dim s As
String, s1 As String, Lie As Integer
List1.Clear
s1=Text1.Text
t=p(s1)
Label5.Caption=
“将密码本换成一张”+Str(t)+ “列的二维表”
i=1
Do While i<=96
s=s+Chr(Mab(i))+
“”
If i Mod
t=0 Or i=96 Then
List1.AddItem
s
s= “”
End If
i=i+1
Loop
wz=
“123456789ABCDEF”
s=Text2.Text
For i =1 To
Len(s)
s1=Mid(s,
i, 1)
hang=(t1-1)\t+1
lie=(t1-1)
Mod t+1
s2=
Next i
Text3.Text=s2
End Sub
答案: 【1】23
【1】sum=sum+t1\10+t1 Mod 10【2】t1=zm(Asc(s1))【3】s2 + Mid(wz, hang, 1)+ Mid(wz, lie, 1)