1.  编写一个加密程序,功能如下:输入明文和一串数字密钥,显示加密后的密文,加密算法如下:

①将明文逆序排列,如明文“Python.org”,逆序后为“gro.nohtyP”;

②循环利用数字密钥串的每一位数字 k,依次对字符串中的每个英文字母右移 k 个字母替代,其他字符保持不变。如:输入的数字密钥串为“2024”,“gro.nohtyP”的“n”是第 4个字母,使用密钥串“2024”中的第 4个数字“4”进行右移 4个字母替代,即“n”往后移 4个字母,得到的是“r”,如下表所示:

③经过数字密钥串处理后,将字符串中的每个字符转换为 8位二进制 ASCII码值(不足 8位的左边补 0,补足 8位),并分成两段(左边 4位为高四位,右边 4位为低四位),如字符“i”的二进制 ASCII码值为 01101001,高四位为 0110,低四位为 1001;

④将高四位转化为十六进制数(如 0110转化为 6);

⑤将低四位与高四位执行异或(⊕)操作后转化为十六进制数(提示:0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0,如 1001⊕0110=1111,1111转化为 F);

⑥依次连接④⑤得到的两位十六进制数,即为该字符的密文,如“i”的密文为“6F”;

⑦将每个字符的密文按照顺序依次连接即为最终的密文。程序运行结果如图所示。

实现上述功能的 Python程序如下,请回答下列问题:

(1) 按照上述加密算法,经过数字密钥串处理后,字符“m”的密文是
(2) 请在划线处填入合适代码。

def xor(x,y): #两个一位二进制数异或

 if x==y:

 return "0"

 else:

 return "1"

def DtoB(D): #十进制转 8位二进制,高位段和低位段根据规则处理

 B=""

 for i in range(8):

 r=D%2

 D=D//2

 B=str(r)+B

 for j in range(4):

 B=B[:j+4] ++ B[j+5:]

 return B

mingw=input("请输入明文:")

key=input("请输入数字密钥串:")

mingw=

miw="";pos=0

for i in range(len(mingw)):

 if "A"<=mingw[i]<="Z" or "a"<=mingw[i]<="z":

 if "A"<=mingw[i]<="Z":

 t=ord("A")

 else:

 t=ord("a")

 miw+=chr((ord(mingw[i])-t+int(key[pos]))%26+t)

        

 else:

 miw+=mingw[i]

new=""

for i in range(len(miw)):

 new+=DtoB(ord(miw[i]))

 hex="0123456789ABCDEF";result="";

 for i in range(0,len(new),4):

 n=int(new[i])

 for j in range(1,4):

 n=n*2+int(new[i+j])

        

print("密文为:",result)

【考点】
运算符、基本运算与表达式; 加密与解密算法;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
2. 小萌对文本数据进行加密处理,加密算法设计如下:

第一步:换位加密。将明文字符串首尾相接围成一圈,从第一个字符开始计数,计数到m时相应的字符出圈,然后从下一个字符重新计数,直到最后圈中的字符全部出圈。出圈的序列就是该换位加密后的密文。例如明文“abY82?”,密钥m=4,按照上述规则得到的密文为“8baY?2”。

第二步:替代加密。将第一步得到的密文中的大小写字母和数字进行加密,密文字符由正常顺序的字母表或数字表右移m个位置替换得到。例如当m=4时,替换情况如第16题图所示。当m=4时,“8baY?2”经过处理后的密文为“2feC?6”。

(1) 明文字符串“5c-W”经过上述加密方法,密钥m=3处理后的密文字符串为
(2) 小萌根据上述加密策略编写Python程序如下,请在划线处填上合适的代码。

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)

综合题 困难