1)将该字符的ASCII码转换成 8 位二进制数(不足8位的,高位补上相应数量的0);
2)将上述 8 位二进制循环左移 3 次(移出的数位放在最右边);
3)将上述处理后的 8 位二进制数依次取反(1 变 0,0 变 1);
4)最后将这 8 位二进制分成左右两个 4 位二进制数,分别转换成十进制数,然后从密钥字符串中取出相应的字符作为密码。密钥见下表:
值(十进制) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
加密字符 |
W |
g |
Q |
# |
f |
0 |
2 |
y |
* |
? |
S |
c |
A |
p |
x |
T |
例如,明文小写字母“a”,通过上述加密算法加密后的密文是“Tf”,加密过程如下:
“a的ASCII码为97,转换成二进制是01100001”→“逐位取反后为10011110”→“循环左移3次为11110100”→“转换为两个十进制数分别为15,4”→“得到密文Tf”。
程序运行界面如下图所示:
实现上述功能的程序如下,请回答下列问题:
def miyao(b): #从密钥中得到相应的密码
s=0
my={0:"W",1:"g",2:"Q",3:"#",4:"f",5:"0",6:"2",7:"y",8:"*",9:"?",10:"S",11:"c",12:"A",13:"p",14:"x",15:"T"}
for i in range(8):
if i==3:
zh=my[s]
s=0
zh=
return zh
st=input("输入明文:")
ans=""
for i in range(len(st)):
a=[]
k=ord(st[i])
for j in range(8):
a.append(1)
while :
r=1-k%2
k=k//2
a[j]=r
j=j-1
a=a[3:8]+a[0:3]
ans=ans+miyao(a)
print(ans)
划线处,请填入合适的选项。(单选,填字母)。
A.s=s*2+b[i] B.s=s+b[i]*2 C.zh=zh+my[s]
D.zh=my[s]+zh E.k<0 F.k>0