请回答下列问题:
Private Sub Command1_Click()
Dim s As String, ch As String, mw As String
Dim i As Integer, j As Integer
s = Text1.Text
i = 1
j = 1
mw = “”
Do While i <= Len(s)
ch = ①
j = j + 1
mw = ②
i = i + j
Loop
Text2.Text = ③
End Sub
① ② ③
①将发送信息中的每一个字符的八位二进制取反
②第1、2、4、8位上插入4个二进制数,若取反后的八位二进制数中1的个数是偶数,插入的4个二进制是1、0、1、0,否则是0、1、0、1
③将12位二进制分为3段(4位一段),每一段的最后一个数字移动到最前面,并将移动后的4位二进制数抓换为十六进制数,转换后的3位十六进制数即是加密后的字符字符"A"的加密过程如下表所示:
原文“A”转换成8位二进制数取反 |
1 0 1 1 1 1 1 0 |
插入4位二进制数1、0、1、0 |
1 0 1 1 0 1 1 0 1 1 1 0 |
4位1段,最后一个数字移动到最前面 |
1101 0011 0111 |
转换为十六进制数,即密文 |
D37 |
按照上述规则,小明设计了一个加密的VB程序,程序功能如下:在Text1中输入待加密的字符,单击“加密”按钮,将加密后的字符显示在Text2中,程序运行界面如下图所示,请回答如下问题:
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer Dim m As Integer, n As Integer, t As Integer Dim count As Integer
Dim a(1 To 12) As Integer
Dim mingw As String, miw As String
mingw = Text1.Text
For i = 1 To Len(mingw)
n = Asc(Mid(mingw, i, 1))
j = 8
Do While
a(j) = (n + 1) Mod 2 count = count + a(j)
n = n \ 2
j = j - 1 Loop
For k = 1 To 4
m = 8 + k - 1
Do While m >= 2 ^ (k - 1)
a(m + 1) = a(m)
m = m –1
Loop
Next k
For t = 1 To 3
miw =
Next t
Text2.Text = miw
Next i
End Sub
Function rev_btoh(b(i) As Integer, start As Integer, ending As Integer) As String
Dim i, sum As Integer
Const code = "0123456789ABCDEF"
sum = b(ending)
For i = start To ending - 1
sum = sum * 2 + b(i)
Next i
rev_btoh = Mid(code, sum + 1, 1)
End Function
Private Sub decrypt_ Click()
Dim g,n,U,y,hkey As Integer
Dim mw, xx As string
Dim a(1 To 100) As Integer
Dim i, L As Integer, c As String
'经与小明的协商,小红已获得g,n,U,y的值
g=2:n=7 '约定两个数g和n的值分别为2和7
U=2:y=5 '小红随机生成的数y的值为5
mw = Text1.Text '小明的密文,由数字和逗号组成
hkey = ①
L=1
For i = 1 To Len(mw)
c = Mid(mw, i, 1)
If Then
a(L)=a(L)*10+Val(c)
Else
L= ②
End If
Next i
For i=1 To L
a(i) = a(i) Xor hkey
③
Next i
Text2.Text = xx
End Sub
① ② ③
例:使用凯撒密码对明文”yza”进行加密的过程:“yza”→ 121 122 97 →··· → 98 99 100 →“bcd”
要求:如果明文是大写字母则需要转小写。如果明文是其它字符则不作任何处理。例如:明文为“ABc,z”密钥为3,则结果密文为“def,c”
def change(code,key):
#change函数功能:实现要进行加密的字符code由大写字母转小写字母
#判断转换后的字符code是否为小写字母,若是则进行加密
m=ord(code)
return chr(m)
code=input(“请输入要加密的明文”)
key=int(input(“请输入密钥”))
code_new=“”
for i in code:
code_new+=change(i,key)
print(code_new)
根据上述加密算法编写解密程序。程序在启动时读取密钥矩阵存入数组a 中,在文本框Text1
中输入密文,点击“解密”按钮,在文本框Text2 中显示明文。运行界面如图c 所示。
Const n = 3
Dim a(1 To n * n) As Integer
Private Sub Command1_Click()
Dim mw(1 To 2*n*n) As Integer
'存储密文数据,奇数位存储加密值,偶数位存储该数据在原文中的位置
Dim yw(1 To n*n) As Integer '存储解密数据
Dim k As Integer
'生成规模为n*n 的密钥矩阵存入数组a中,代码略
For i = 1 To Len(Text1.Text)
c = Mid(Text1.Text, i, 1)
If c <> "," Then
t = t * 10 + Val(c)
Else
mw(k) = Val(t): t = 0
End If
Next i
For i = 1 To k\2 '对密文解密,结果存数组yw
yw(mw(2 * i)) =
Next i
s = ""
For i = 1 To k\2
s = s + Chr((yw(i)) + 64)
Next i
Text2.Text = s
End Sub
Function getmm(x As Integer, n As Integer)
col = (x - 1) Mod n + 1
row = (x - 1) \ n + 1
getmm = a((col - 1) * n + row)
If row Mod 2 = 0 Then getmm =
End Function
1)若是大写字母,则进行字母替换:英文26个字母按键盘QWERT的顺序排列,从第一行到第三行连接起来再与字母表顺序进行替换,如Q用A来替换,Y用F替换,如下所示:
2)将经过字母替换后的明文每个字符的8位二进制ASCII码(不足8位的左端补0,补足8位)分成两段(左4位一段,右4位为另一段),如字符“A”的二进制ASCII值为01000001,分段后为0100,0001;
3)将高位段(左边4位)转化为十六进制数(如0100转化为4);
4)对低位段(右边4位)执行0→1,1→0后转化为十六进制数(如0001→1110→14→E);
5)依次连接两位十六进制数,得到该字符的密文,如“Q”的密文为“4E”;
6)将每个字符的密文按照明文的顺序依次连接。
程序运行结果如下图所示:
实现上述功能的Python程序如下,请回答下列问题:
def dtb(num): #十进制转8位二进制,高低4位分别处理
i=0;result=""
while i<8:
if i<4:
y=1-num % 2
else:
y=num % 2
num=num//2
result=str(y)+result
i+=1
return result
mw=input("请输入待加密的字符:")
jm=""
mm={"Q":"A","W":"B","E":"C","R":"D","T":"E","Y":"F","U":"G","I":"H","O":"I","P":"J","A":"K","S":"L","D":"M","F":"N","G":"O","H":"P","J":"Q","K":"R","L":"S","Z":"T","X":"U","C":"V","V":"W","B":"X","N":"Y","M":"Z"}
for i in range(len(mw)):
if "A"<=mw[i]<="Z":
else:
jm+=mw[i]
jm1=""
for i in range(len(jm)):
zf="0123456789ABCDEF";result1="";sum=0
for i in :
sum=int(jm1[i])*8+int(jm1[i+1])*4+int(jm1[i+2])*2+int(jm1[i+3])
result1+=zf[sum]
sum=0
print("密文为:",result1)
编写解密程序,功能如下:程序执行时,输入明文后,第一行输出去重后明文,第二行输出密文。
程序运行界面如图所示。
实现上述功能的程序如下,回答下列问题。
s1=input("请输入明文:")
s2=s1[0]
for i in range( ① ):
c=s1[i]
if c>="A" and c<="Z":
if ② :
s2=s2+c
else:
s2=s2+c
mw=""
i=5
while i<len(s2):
mw=mw+s2[i]
③
print("去重后的明文为:",s2)
print("密文为:",mw)
① ② ③
⑴将明码中每个ASCII字符的8位二进制内码分成两段,如字符“C”的8位二进制内码为01000011,分段后为0100,0011。
⑵将左边4位左移1位,将原第1位数码移到第4位,并转化为十六进制。如0100,移动后为1000,转化为十六进制为8。
⑶将右边4位按步骤(2)算法进行处理。
⑷从左到右连接两位十六进制数,得到该字符的密文。如字符“C”的密文为86。
按此加密算法,字符“A"的密文是( )