Dim a(1 To 9) As Integer
Private Sub Command1_Click()
Dim column As Integer, row As Integer, t As Integer, tmp As Integer
Dim s As String, ch As String, result As String
s = Text1.Text: result = ""
For i = 1 To Len(s)
ch = Mid(s, i, 1): t =.
column = (t - 1) Mod 3 + 1
Do While t >= 3
t = t \ 3
Loop
row =
tmp = (Asc(ch) + - 65) Mod 26 + 65
result = result + Chr(tmp)
Next i
Text2.Text = result
End Sub
Private Sub Form_Load() '用来生成3*3矩阵
For i = 1 To 9
a(i) = Int(Rnd * 9) + 1
s = s + Str(a(i))
If i Mod 3 = 0 Then
List1.AddItem s
s = ""
End If
Next i
End Sub
import os #开始
def NewCaesar(m,n,t):
z='';i=0
while i<:
tmp=
if tmp in m:
if ord(t[i])<=90:
z+=n[m.find(tmp)]
else:
z+=n[m.find(tmp)].lower()
else:
z+=t[i]
i+=1
return z
m='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n='QWERTYUIOPASDFGHJKLZXCVBNM'
a=input('请输入<明文>a=')
b=NewCaesar(m,n,a)
print('对应的密文为:',b)
c=NewCaesar(n,m,b)
print('解密后明文为:',c)
if :
print('加密解密成功!')
else:
print('加密解密失败!')
input("运行完毕,请按回车键退出...")
os._exit(0)
#结束
①“A”变为一个1到100内的随机数*27+1,“B”变成一个1到100以内的随机数*27+2,…,“Z”变为一个1到100以内的随机数*27+26;
②每个字母变为数字后会加一个“一”用来分割数字;
③其他空格和标点字符都按原来的表示。
李雷用VB编写了一个解密程序,功能如下:将邮件中密文的内容复制到文本框Text1中,点击“解密”按钮Command1后,程序会解密密文并将解密后的内容显示在文本框Text2中,程序运行界面如图所示。
Private Sub Command1_Click( )
Dims As String, yw As String, t As String
Dim Value As Integer
s=Text1.Text
Value=0
yw=""
For i=1 To Len(s)
t= ①
If t>="0" And t<="9" Then
Value=Value *10+Val(t)
Else If t="-" Then
yw=yw+Chr(Asc("A")+Value Mod 27-1)
②
Else
yw=yw+t
End If
Next i
Text2. Text=yw
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
①授权码由9位字符组成,前8位为日期的密文,最后1位为验证码;
②取日期各位的字符,若该字符第一次出现,则直接取其对应的加密字符,否则取下一个不重复的加密字符;
③求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符,取得的验证码重复时,处理规则与②相同。
加密字符对应表如下:
值(十进制) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
加密字符 |
K |
n |
G |
j |
L |
t |
W |
b |
O |
a |
P |
H |
Z |
Q |
Y |
C |
小李设计了一个生成8位日期(YYYYMMDD格式)授权码的VB程序,程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成”按钮Command1后,在标签Label2中显示该日期的授权码。运行界面如图所示。实现上述功能的VB程序如下。
Dim f(0 To 15)As Integer
Const code ="KnGjLtWbOaPHZQYC"
Private Sub Command1_Click( )
Dim rq As String,sq As String
Dim c As Integer,i As Integer,d As Integer
rq = Textl.Text:sq=""
For i= 1 To 8
c=Val(Mid(rq,i,1))
d=d+c
sq= ①
Next i
yz =GetChar(d Mod 16+1)
Text2.Text = sq + yz
End Sub
Function GetChar(x As Integer) As String
Dim flag As Boolean
flag = False
Do While flag = False
f(x) =f(x) +1
If f(x) =1 Then
②
f(x) =f(x) +1
flag=True
Else
x=(x+1) Mod 16
End If
Loop
End Function
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
①将该字符的ASCII码加密钥后,转换成对应的8位二进制;
②将对应的8位二进制数进行按位取反(1变0,0变1);
③将最后产生的8位二进制数转换成对应的十六进制数;
④将得到的十六进制数码交换顺序后连接,即为该明文的密文。
例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。
小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。
Function btoh(m As String)As String ‘将4位二进制数转换成对应的十六进制数
Dim s As Integer, i As Integer
Dim st As String
st="0123456789ABCDEF"
s=0
For i=1 To 4
s=s*2 +Val(Mid(m,i,1))
Next i
①
End Function
Private Sub Command1_Click( )
Dim ans,ch,s,ret,s1,s2 As String
Dim a,b,c As Integer
s= Text1.Text
c= Val(Text2.Text)
For i = 1 To Len(s)
ch=Mid(s,i,1) ‘取出第i个字符存入变量ch
a=Asc(ch)
b=a+c
ret = " "
For m=1 To 8 ‘完成加密步骤①和步骤②
n=(b+1)Mod 2
ret =str(n)+ ret
②
Next m
s1 = btoh(Mid(ret,1,4)) ‘完成加密步骤③和步骤④
s2 = btoh(Mid(ret,5,4))
ans=ans +s2+s1
Next i
Text3.Text=ans
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
①如果“一”号右边的字符按照ASCII码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“一”号,例如"c-g"输出为"cdefg","3-7"输出为"34567"
②如果“一”号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,保留中间的“一”号,例如"a-a"输出时为"a-a","4-1"输出为"4-1"
③如果“一”号右边的字符恰好是左边字符的后续字符,则删除中间的“一”号,例如:"d-e"就输出为"de","3-4"应输出为“3-4"。
某同学按照上述算法,编写了VB程序,功能如下:在文本框Text1中输入简写字符串,单击“展开”按钮Command1后,程序进行字符串展开处理并显示在文本框Text2中。程序运行界面如图所示。
Private Sub Command1_Click( )
Dim st1,st2 As String,i,n As Integer
St1=Text1.Text
n=Len(s1)
st2=""
For i=1 To n
If pos(st1, i)<> "—" Then
st2=st2+ pos(st1, i)
Else
If pos(st1, i) <pos(st1, 1) Then
For j=Asc(pos(st1, i-1))+1To Asc(pos(st1, i+ 1))-1
①
Next j
Else
st2 = st2+"—"
End If
End If
Next i
Text2. Text = s2
End Sub
Function pos(s As String, x As Integer) As String
②
End Function
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
⑴找出文章(以“.”结束)中所有用英文表示的数字(均为小写,数字范围1≤n≤20),单词与数字对应如下:
单词 |
one |
two |
three |
four |
five |
six |
seven |
eight |
nine |
ten |
…… |
twenty |
数字 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
…… |
20 |
⑵将这些数字平方后除以100取余,得到两位数如00,04,21,96。
⑶把这些两位数按升序排成一行,组成一个最小的新数,如果新数开头为0,就去除。
⑷步骤(3)找出的最小数即为密码。
小明按照上述方法,设计了一个解密的VB程序,功能如下:单击“解密”按钮Command1,程序依次将文本框Text,1中以空格分隔的每个英文单词取出,若单词属于数字单词,则按解密步骤进行处理,最后在文本框Text2中输出解密结果。
程序运行效果如图所示,请回答下列问题:
Dim a(1 To 20) As String
Private Sub Form_Load()
a(1) = "one": a(2) = "two"
'……将所有数字单词按顺序存入数组a中,代码略
End Sub
Private Sub Command1_Click()
Dim s As String, tmp As String
Dim c as Integer,i As Integer, j As Integer, k As Integer, t As String, ch As As String,code As Long
Dim b(1 To 100) As String 'b数组存放数字单词处理后得到的两位数
s = Text1.Text
c = 0: i = 1: flag = True:t = ""
Do While i <= Len(s)
ch = Mid(s, i, 1)
If ch >= "a" And ch <= "z" Then
t = t + ch
flag = False
ElseIf flag = False Then
For j = 1 To 20
If t = a(j) Then
c = c + 1
b(c) =
End If
Next j
t = ""
flag = True
End If
i = i + 1
Loop
'将b数组中的两位数按数值大小进行升序排序,代码略
For i = 1 To c
t = Val(b(i))
Next i
Text2.Text = Str(code)
End Sub
Function decode(num As Integer) As String
Dim mo As Integer
mo = num * num Mod 100
If mo = 0 Then
decode = "00"
ElseIf Then
decode = "0" + Trim(Str(mo))
Else
decode = Trim(Str(mo)) 'Trim为去除字符串两端空格的函数
End If
End Function
①将明文字符串s中的每个字母字符根据它所在该字符串的位置,往后移动相应的位置,并转化为对应的小写或大写字母(例如:大写字母A往后移动5位变成F,转化成小写字母得到f;小写字母y往后移动8位得到g,转化成大写字母得到G),非字母字符不处理,得到新串ss。
②将①得到的新串ss平均切割成两部分,若ss的长度n为奇数,则第一部分长度为n//2+1,第二部分长度为n//2。再将后面一段字母依次逐个插入前一段字符后边,组成一段密文。
例如“Good.Luck!”生成密文过程如下:
①明文字符串s移位和大小写转换过程:
下标位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
原始字符 |
G |
o |
o |
d |
. |
L |
u |
c |
k |
! |
向后移动i位 |
H |
q |
r |
h |
. |
R |
b |
k |
t |
! |
大小写转换 |
h |
Q |
R |
H |
. |
r |
B |
K |
T |
! |
②将①得到的密文ss平均切割成两部分。
例如将上述①得到的字符串中6~10位置的字符依次逐个连接在1~5字符后面,生成密文如图a所示:
图a
下标位置 |
1 |
2 |
3 |
4 |
5 |
6 |
密文字符 |
i |
T |
C |
D |
S |
! |
位置交换 |
||||||
大小写转换 |
||||||
向前移动i位 |
def encrypt(msg,key):
result = ""
size = len(msg)
for i in range(0,size):
result = result + msg[(i - key) % size]
return result
msg = input("请输入明文:")
key = int(input("请输入密钥:"))
re =
print(re)
①将字符的ASCII码用8位二进制表示;
②将转换出来的8位二进制数整体向右移动一位,将最右边移出的一位放到最左边(高位)进行补充;
③每四位进行分组,分别转换成十六进制数;
④转换后的这两个十六进制字符即为加密字符
现有字符“e”(ASCII码为101D),加密后的字符是( )。
Private Sub Command1_Click( ) '加密
Dim enc As String, dec As String, i As Integer
Dim s As String, n As Integer
dec= Text1. Text
For i=1 To Len(dec)
s=
n=i Mod 10
If n=0 Then n= 10
enc=Chr(Asc(s)+n) & enc
Next i
Text2. Text= enc
End Sub
Private Sub Command2_ Click( ) '解密
Dim enc As String, dec As String, i As Integer
Dim n As Integer, s As String, p As Integer
enc= Text2. Text
n= Len(enc)
For i=1 To n .
s= Mid(enc, i, 1)
p=
If p=0 Then
dec= Chr(Asc(s)-p) & dec
Next i
Text1. Text= dec
End sub
1)将该字符的ASCII码转换成对应的8位二进制;
2)将对应的8位二进制数进行按位取反(1变0,0变1);
3)将产生的8位二进制数循环左移2次;
4)将最后产生的8位二进制数转换成对应的十六进制数。例如,密文小写字母“d”通过上述解密算法解密后生成的明文是“6E”,信息加密过程如图b所示。
实现上述功能的VB程序如下:在文本框Text1中输入密文,单击“解密”按钮Com-mand1,程序对密文数据依次进行解密处理,在文本框Text2中显示解密后生成的明文。
程序运行界面如图c所示。实现上述功能的VB程序如下,请回答下列问题:
Function jiemi(m As String) As String '将4位二进制数转换成相应的十六进制数
Dim k As Integer, i As Integer
Dim str As String
str=“0123456789 A BCDEF”
k=0
For i=1 To 4
k=k * 2+Val(Mid(m, i, 1))
Next i
End Function
Private Sub Command1_Click()
Dim ans As String, s As String, ch As String, ret As String
Dim s1 As String, s2 As String
Dim i As Integer, m As Integer, asc1 As Integer, n As Integer
s= Text1. Text
ans=“”
For i=1 To Len(s)
ch= Mid(s,i, 1)
'取出第i个字符存入变量ch
asc1= Asc(ch)
ret =“”
For m=1 To 8
'完成解密步骤(1)和步骤(2)
ret=n & ret
asc1=asc1 \ 2
Next m
ret= Mid(ret, 3,6) +Mid(ret, 1, 2)
'完成解密步骤(3)
s1 = jiemi(Mid(ret, 1, 4))
ans= ans &s1 &.s2 '将第i个解密后的字符添加到变量ans的末尾
Next i
Text2. Text= ans
End Sub
A)在输入的字符串中提取英文字母,作为需要加密的明文(明文字符数必须是3的倍数,不足3位的舍去)
B)将明文ASCII码分成3个字节一组,顺次连接后得到24位二进制数;
C)将得到的24位二进制数字按每6位一组分成4组,每组6个位;
D)在C)中得到的6个位前补上2个0,得到8个字节的二进制数;
E)将D)中得到的8个二进制数分别转换为十进制数;
F)将得到的数字用随机产生的大写字母连接起来,以大写字母结尾
按照上述规则,设计了一个加密VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中英文字母提取,将3的倍数个的字母转换为4个数字,并输出在文本框Text2中程序运行效果如下图所示。请回答下列问题:
Private Sub Command1_ Click()
Const maxn= 100
Dim s As String, i As Integer, n As Integer
Dim ch As String, k As Integer, jg As String
Dim a(1 To maxn) As Integer, b(1 To maxn) As Integer
s= Text1. Text
n=0
For i=1 To Len(s)
ch= Mid(s, i, 1)
If Then
n=n+1
a(n)= Asc(ch)
End If
Next i
For i=0 To k
b(i * 4+1)=a(i*3+1)\ 4
b(i*4+2)=
b(i*4+3)=(a(i*3+2)Mod16)* 4+a((i- 1) *3+3)\ 64
b(i*4+4)=a(i*3+3)Mod64
Next i
Randomize
jd= ""
For i=1 To 4 * (k+1)
jd=jd+Str(b(i)) +
Next i
Text2. Text=jd
End Sub
Function pd(c As String) As Boolean
pd= False
If c>="A" And c<="Z" Or c>="a" And c<="z" Then:
pd= True
End If
End Function
第一步:换位加密。将明文字符串首尾相接围成一圈,从第一个字符开始计数,计数到m时相应的字符出圈,然后从下一个字符重新计数,直到最后圈中的字符全部出圈。出圈的序列就是该换位加密后的密文。例如明文“abY82?”,密钥m=4,按照上述规则得到的密文为“8baY?2”。
第二步:替代加密。将第一步得到的密文中的大小写字母和数字进行加密,密文字符由正常顺序的字母表或数字表右移m个位置替换得到。例如当m=4时,替换情况如第16题图所示。当m=4时,“8baY?2”经过处理后的密文为“2feC?6”。
mingwen=input ("请输入明文:")
m=int (input("请输入密钥:"))
q=[’’]*1000
miwen=""
n=len (mingwen)
for i in range(n):
q[i]=mingwen[i]
head, tail=0, n
i, s=1, 0
while i<=n:
tmp=q[head]; head+=1
s+=1
if :
miwen+=tmp
i+=1
s=0
else:
tail+=1
ans=""
for i in miwen:
if i>="A" and i<="Z"
x=chr((ord(i)-65+m)%26+65) #大写字母A的ASCII码为65
elif i>="a" and i<="z":
x=chr((ord(i)-97+m)%26+97) #小写字母a的ASCII码为97
elif i>="0" and i<="9":
#数字字符0的ASCII码为48
else:
x=i
ans+=x
print (ans)