当前位置: 高中信息技术 / 综合题
  • 1. (2024高二下·浙江期中)  编写一个加密程序,功能如下:输入明文和一串数字密钥,显示加密后的密文,加密算法如下:

    ①将明文逆序排列,如明文“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. (1) 按照上述加密算法,经过数字密钥串处理后,字符“m”的密文是
    2. (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)

微信扫码预览、分享更方便