操作1:在文本框中分别输入L,R,T(1≤L≤R≤n),对数组下标为L到R之内(包含L和R)的字符做相应的字符加密操作(1≤T≤100)。
操作2:在文本框中输入M(1≤M≤n),在标签中输出a(M)的值。
为了提高算法的效率,小明设计了如下算法,以n=10为例,将n个元素依次分成
段(
表示对
向下取整),每段的元素个数为
,若最后有不足
个元素,则自成一段。给每段设置一个标记,如下表所示。

①对于操作1,若输入的L,R属于同一段,则直接对a(L to R)的每个元素的ASCII码进行后移T位的操作。如输入4,6,3,则第2段中的每个字符变为k,r,q,操作后如下表所示。

②对于操作1,若输入的L,R不属于同一段,则对元素a(L)所在段中从a(L)开始到该段最后一个元素为止的每个字符的ASCII码做后移T位的操作,并对元素a(R)所在段中从该段第一个元素开始到a(R)为止的每个字符的ASCII码做后移T位的操作,对a(L)元素所在段的下一段开始到a(R)元素所在段的上一段为止的每个段标记值增加T,这些段中的元素值保持不变。如在上表的基础_上再输入1,8,2,则第1段的3个字符和第3段中的前2个数都做相应的字符后移2位的操作,第2段的段标记值增加2,如下表所示。

③对于操作2,若输入M的值为4,则输出a(4)的值,若a(M)所在的段标记为奇数,a(M)的值为该数组元素的值,否则输出a(M)对应的大写字母的值,如a(4)=H。程序运行如下。请回答下列问题:
操作1:在文本框Text1,Text2,Text3中依次输入1,8,3后,点击按钮Command1
操作1:在文本框Text1,Text2,Text3中依次输入7,9,2后,点击按钮Command1
操作2:在文本框Text4中输入6后,点击按钮Command2
Const n=10
Dim a(1 To n)As String
Dim dbj(1 To n)As Integer ‘依次表示每段的标记值
Dim bk As Integer ‘表示每段的元素个数.
Private Sub Form_Lond()
bk = Int(Sqr(n))
‘读取数据,并存储到数组a中,代码略
‘读取数据,并存储到数组dbj中,代码略
End Sub
Function bl(x As Integer)As Integer ‘bl函数返回数组元素a(x)的段编号
bl=
End Function
Private Sub Command1_Click()
Dim L Ax Integer, R As Integer, t As Integer
L= Val(Text1.Text)
R= Val(Text2.Text)
t= Val(Text3.Texr)
If bl(L)= bl(R) Then
For i =L To R
a(i)= Chr((Ase(a(i))- Ase("a")+t) Mod 26+97)
Next i
Else
For i=L To bl(L)*bk
a(i) = Chr((Ase(a(i))- Ase("a")+1) Mod 26+97)
Next i
For i= bl(L)+ 1 To bl(R)-1
dbj(i) = dbj(i) + t
Next i
For i =
a(i) = Chr((Ase(a(i))-Ase("a") + 1) Mod 26 + 97)
Next i
End If
List1. AddItem Str(L) +"," + Str(R) + "," + Str(t) +“加密完成!”
End Sub
Private Sub Command2_Click( )
Dim M As Integer
Dim jg As Suring
M= Val(Text4. Tex1)
If dbj(bl(M)) Mod2 = 0 Then
Jg=
Else
jg= a(M)
End If
Labell. Caption =“经过一 系列操作后. a(” + Str(M) +“)的值为:“+ ig
End Sub
例如:n=10,原文字符串为“ABCXYEFDOK”,m=4时,处理过程如下:
其中,第1段中字母“X”后移4位后超过字母“Z”的ASCII码值,用“b”表示,第2段中字母“Y”后移2位用“a”表示用VB编写程序,程序运行时,在文本框Text1中输入原文字符串,在文本框Text2中输入每段个数,单击“加密”按钮Command1后,在文本框Text3中显示加密结果。程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
Dim a(0 To 50) As String, b(1 To 50) As Integer
Private Sub Command1_Click ()
Dim i As Integer, j As Integer, k As Integer, m As Integer, max As Integer
n = Len(Text1. Text)
For i=1 To n
a(i) = Mid(Text1.Text, i, 1)
b(i) =
Next i
m=Val (Text2. Text)
max=1
For k=1 To n\m
For i=(k-1)*m+2 To k*m
j=i
Do while
b(i)=b(i)+1
j=j-1
Loop
If b(i)>max Then
max = b(i)
End If
Next i
For i=(k-1)*m+1 To k*m
s =s+ mingtoni (a(i), max)
Next i
max=1
Next k
If n Mod m <> 0 Then
For i=(n\m)*m+1 To n
s=s+ a(i)
Next i
End If
Text3.Text = s
End Sub
Function mingtomi(e As String, d As Integer) As String
If Ase(c) + d > Asc("Z") Then
Else
mingtomi = Chr(Asc(c) + d)
End If
End Function
编写解密的VB程序,功能如下:在文本框Text1中输入密文,单击“解密”按钮Command1,在文本框Text2中显示去重后的文本,并在标签Label1中显示明文。程序运行界面如下图所示。
Private Sub Command1_Click()
Dim s1 As String, s2 As String, c As String, mw As String
Dim i As Integer
s1 = Text1.Text
s2 = Mid(s1, 1, 1)
For i = 2 To
c = Mid(s1, i, 1)
If c >= "A" And c <= "Z" Then
If Then s2 = s2 + c
Else
s2 = s2 + c
End If
Next i
mw = " "
i = 6
Do While i <= Len(s2)
mw = mw+Mid(s2, i, 1)
Loop
Text2.Text = s2
Label1.Caption = mw
End Sub
明文:HelloWorld
密钥:abcabcabca
密文:HfnlpYosnd
|
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 |
|
|
A |
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 |
|
B |
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 |
A |
|
C |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
|
D |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
|
E |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
|
F |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
|
G |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
|
H |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
|
I |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
|
J |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
|
K |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
|
L |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
|
M |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
|
N |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
|
O |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
|
P |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
|
Q |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
|
R |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
|
S |
S |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
|
T |
T |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
|
U |
U |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
|
V |
V |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
|
W |
W |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
|
X |
X |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
|
Y |
Y |
Z |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
|
Z |
Z |
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 |
依据上述算法描述设计了如下VB程序。请回答下列问题:
Const MIN_ASC = 65 ′字母“A”的ASCII值
Function X2D(x As String) As String ′字符串小写转成大写
Dim s As String, zf As String, i As Integer
s = “”
For i = 1 To Len(x)
zf = Mid(x, i, 1)
If zf >= “a” And zf <= “z” Then
s = s +
Else
s = s + zf
End If
Next i
X2D = s
End Function
Private Sub Command1_Click()
Dim M As String, K As String, C As String, flag As Boolean
Dim i As Integer, t As Integer, ch As Integer, pos As Integer, j As Integer
M = Text1.Text ′明文
K = Text2.Text ′密钥
t = Len(K)
K = X2D(K) ′将密钥全部转成大写
C = “ ” ′加密后的结果
For i = 1 To Len(M)
ch = Asc(Mid(M, i, 1))
flag = False
If ch >= 97 And ch <= 122 Then ch = ch - 32: flag = True
pos = ′密钥的字符位置值
If pos = 0 Then pos = t
j = Asc(Mid(K, pos, 1)) ′密钥字符的ASCII值
ch = ch - MIN_ASC
j = j - MIN_ASC
ch =
ch = ch + MIN_ASC
If flag Then ch = ch + 32 ′设置字母的大小写形式
C = C & Chr(ch)
Next i
Text3.Text = C
End Sub
步骤一:输入明文字符,将该字符转换成ASCII;
步骤二:将ASCII码转换成十六进制字符串;
步骤三:将产生的十六进制字符串进行头尾互换并输出。
若用Python程序实现上述加密过程,请回答下列问题:
s=input("请输,入明文字符(大写字母或小写字母):")
a= #将字符转换为ASCII
b= #将ASCII码转换成十六进制字符串
B .
C .
D .
提示:int(x,16)函数实现将十六进制字符串x转换成十进制整数ASCII值。
def decrypt(code,key):#code:密文key: 密钥
code_ new = "
for s in code:
m= ① #按照输入的key值,做移位运算
if m<97:
②
code_ new + = chr(m)
returm code_ new
code = input(‘请输入密文:’)
key = intinput(‘请输入密钥:’)
code_ new = decrypt(code, key)
print(code_ new)
① ②
s= Text. Text
For i =1 To Len(s)
ch= Mid(s,i,1)
nk=Asc(ch)-i
If nk <0 Then nk nk+127
Text2. Text= Text2 Text Chr(nk)
Next i
已知大写字母A的ASCII码值为65,小写字母a的ASCII码值为97,在文本框Text1中输入内容“yhT5”,执行程序段后,文本框Text2显示的内容为( )。
小王利用VB程序实现这一加密功能,程序界面和代码如下所示:
Private Sub Com_ jm_ Click()
Dim x As String, ch As String, cl As String
Dim sl As String, s2 As String, s As String
Dim i As Integer, n As Integer, y As Integer
x= Text1. Text
n=Len(x)
For i=1 To n
ch= Mid(x, i, 1)
If ch >= "0" And ch <= "9" Then
①
s2=s2 & y
Elself ch >="a" And ch<="z" Then
y=(Asc(ch)-Asc("a")+3)Mod 26
②
s1=c1+s1
Else
y=(Asc(ch)- Asc("A")+3) Mod 26
c2=Chr(Asc("A")+y)
s1=c2+s1
End If
Next i
③
Text2 Text=s
End sub
① ② ③
①将明文字符串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
| 数字字符 |
0 |
…… |
7 |
8 |
9 |
|||||||||||||||||
| 二进制值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
…… |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
|
| 十进制值 |
0 |
0 |
0 |
1 |
…… |
1 |
3 |
2 |
0 |
2 |
1 |
|||||||||||
| 对应编码 |
A |
A |
A |
B |
…… |
B |
D |
C |
A |
C |
B |
|||||||||||
例如,数字字符串“709”的编码为“BDAACB”
用VB程序实现上述编码,功能如下:在文本框Text1中输入编码的一串数字字符,单击“编码”命令按钮Command1,在文本框Text2中显示编码结果。程序运行界面如图所示。
Private Sub Command1_ Click( )
Dim code As String, s As String, ch As String, result As String
Dim i As Integer, numL As Integer, numR As Integer
Dim flag As Boolean
code= "ABCD"
s= Text1. Text
flag= True
result=“”
For i= 1 To Len(s)
ch= Mid(s, i, 1)
If ch<"0" Or ch>"9" Then
Exit For '退出循环
Else
numL= Val(ch) \ 4
numR=
result = result +Mid ( code, numL+1, 1)+Mid(code, numR+1, 1)
End If
Next i
If flag Then
Text2. Text= result
Else
Text2. Text="输入错误"
End If
End Sub
①将明码中每个字符的八位二进制ASCII码(不足八位的左端补0,凑足八位)分成两段(左4位一段,右4位为另一段),如字符“C”的二进制ASCI值为01000011,分段后为0100,0011 ;
②将高位段(左边4位)左移一位,并将原第一位数码移到第4位(如0100转化为1000),再转化为十六进制数(如1000 化为8);
③对另一段(右4位)执行2)所示算法,如0011→0110→6;
④顺次连接两位十六进制数,得到该字符的暗码,如“C”的暗码为“86”;
⑤将每个字符的暗码按照明码的顺序连接。
实现上述功能的VB程序如下,请回答下列问题:
Private Sub Command1_Click()
Dim i As Integer, j As Integer, m As Integer, k As Integer
Dim c As String, x As Integer, y As Integer
Dim d(1 To 8)As Integer '数组d存储字符ASCII码二进制从左到右的各位数码
Dim mw As String 'mw存储暗码
mw = " "
For i=1 To Len(Text1. Text)
c= Mid(Text1. Text, i, 1)
For j=1 To 8
d(j)=0
Next j
m= Asc(c)
①
Do While m>0
d(k)=m Mod 2
m=m\2
k=k-1
Loop
x=d(1) : y=d(5)
For j=1 To 3
d(j)=d(j+1)
②
Next j
d(4)= x:d(8)=y
mw= mw十btoh(d)
Next i
Text2. Text= mw
End Sub
'以下函数是将数组元素中的二进制数转换成对应的十六进制数
Function btoh(m() As Integer) As String
'将数组m作为函数的参数
Dim s As Integer, i As Integer
Dim str As String, ch As String
str=" "
s=0 : ch=" "
For i=1 To 8
s=s * 2+m(i)
If i=4 Then
ch= Mid(str, s+1, 1)
s= 0
End If
Next i
③
End Function
① ② ③
1)将该字符串内码分成3个字节一组,顺次连接后得到24位二进制数;
2)将得到的24位二进制数字按每6位一组分成4组,每组6个位;
3)在每组数字前补上两个0,得到4个字节的二进制数;
4)将(3)中得到的四个二进制数分别转换为十进制数;
5)将每个十进制数转换为1个加密字符,对应的“密码表”按数值由小到大依次为“ABCDEF GHIJKLMNOPQRSTUV WXYZ-abcdefghijklmnopqrstuvw xyz0123456789+/”
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:
单击“加密”按钮Command1,程序依次将文本框Text1中每3个字符的ASCII码值作为4个字节转换为四个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。
程序运行效果如图所示。
实现上述功能的VB程序如下:
Function Code2Char(c As Integer) As String
Dim s As String
s=“ABCDEFGHIJKLMNOPQRSTU-VWXYZabcdefghijklmnopqrstuvwxyz 0123456789+ /”
Code2Char=
End Function
Private Sub Command1_Click() '加密过程
Dim n As Integer, s As String, i As Integer, ss As String
Dim a1 As Integer , a2 As Integer, a3 As Integer
'存储加密前字符ASCII码
Dim b1 As Integer, b2 As Integer '分别存储分割、转换后的前两个十进制数
Dim b3 As Integer , b4 As Integer '分别存储分割、转换后的后两个十进制数
s= Text1. Text
n= Len(s)
ss=””
For i=1 To n ()
a1= Asc(Mid(s, i, 1))
a2= Asc(Mid(s, i+1, 1))
a3= Asc(Mid(s, i+2, 1))
b1=a1\ 4
b2=(al Mod 4) * 16+(a2 \ 16)
b3=
b4=a3 Mod 64
ss=ss+Code2Char(b1)+Code2Char(b2) + Code2Char( b3)+Code2Char( b4)
Next i
Text2. Text= ss
End Sub
1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;
2)取日期的第1位字符,若该字符第一次出现,则直接取其对应加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;
3)求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为“X”。取出验证码重复时,处理规则与(2)相同。
加密(验证码)字符对应表如下。
|
值(十进制) |
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位日期(YYY YMM-DD格式)授权码的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
For i=0 To 15
f(i)=0
Next i
rq= Text1. text
sq =””:d=0
If Len(rq) <> 8 Then
Label2. Caption=“请输入8位日期!”
Else
For i=1 To 8
c= Val(Mid(rq,i, 1))
d=d+c
sq =+sq
Next i
If d >=16 Then
yz= GetChar(d Mod 16+1) +GetChar(d \ 16+1)
Else
yz= GetChar(d Mod 16+1)+“X”
End If
Label2. Caption=sq+yz
End If
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 10
End If
Loop
End Function
步骤一、输入大写字母A-F的字符串,通过随机生成的keys列表进行匹配,找到相应的key,进行第1轮加密,得到相应的数字列表a。
步骤二、根据上述结果对加密后列表中的元素按偏移量K(K为正整数)发生偏移,每个元素从右往左向前移动K位,将偏移后结果存储在列表b中。
例如:
整体运行结果如下图所示:
import random
#随机生成 keys 列表
n=6
i=0
keys=[ ]
while i<n:
key=random.randint(1,9)
if key not in keys:
keys.append(key)
print("随机生成加密列表 keys:",keys)
#第1重加密:将输入的字母经过keys列表加密转换为a列表
a=[ ]
s=input("输入您要加密的字母(A-F):")
for i in s:
a.append(keys[])
print("经过第1轮keys列表加密后:",a)
#第2重加密:偏移加密
k=int(input("请输入偏移量K:"))
b=[0]*len(a)
for i in range(len(a)):
b[i]=a[]
print("经过第2轮加密后:",b)
①将明码中每个字符的ASCII码转为八位二进制,依次连接
②位置加密:每4位一组进行移位,第1组左移一位,并将原第一位数码移至最后(如0110转化为1100),第2组右移一位,并将原最后一位数码移至头部(如0001转化为1000),第3组左移...以此类推,实现位置加密,并将每组移动后的结果转换成十进制,按顺序连接
③值加密:随机产生一个密钥key,在符号列表['+','*','//','%']中取出对应运算符号,将②中的十进制结果分别与密钥key进行运算,顺次连接求得该字符的密文,(如key为3,取得运算符'%',则字符'a'的高位密文为12%3=0,低位密文为8%3=2,顺次连接后得'a'的密文为'02'
④将每个字符的密文顺序连接,得到最终字符串密文。
用Python编写的程序运行结果如图所示,请回答下列问题:
import random
def jzzh(x):
s=''
for i in range(8):
r=x%2
s=
x=x//2
return s
def jisuan(x): #进行key运算
m=0
if fh[key]=='+':
m=x+key
elif fh[key]=='*':
m=x*key
elif fh[key]=='//':
m=x//key
elif fh[key]=='%':
m=x%key
return m
def yidong(x):
jg=''
n=len(x)//4
for i in range(n):
if i%2==0:
f=
else:
f=x[i*4+3]+x[i*4:i*4+3]
s=0
for j in f: #将4位二进制转成十进制
s=s*2+int(j)
jg+=
return jg
mingw=input('请输入要加密的明文:')
fh=['+','*','//','%']
miw='' global key
key=random.randint(0,3) for a in mingw:
a=ord(a)
L=jzzh(a)
miw+=L jieguo=yidong(miw)
print("产生的随机密钥为:",key,"\n 密文为:",jieguo)
def jiami(x,key):
if 'a'<=x<='z':
x=chr((ord(x))%26+65)
return x
mingwen=input('请输入明文:')
key=input('请输入密钥:')
miwen=''
for i in range(n):
a=mingwen[i]
print(miwen)