①將明文逆序排列,如明文“Python.org”,逆序后為“gro.nohtyP”;
②循環(huán)利用數(shù)字密鑰串的每一位數(shù)字 k,依次對字符串中的每個英文字母右移 k 個字母替代,其他字符保持不變。如:輸入的數(shù)字密鑰串為“2024”,“gro.nohtyP”的“n”是第 4個字母,使用密鑰串“2024”中的第 4個數(shù)字“4”進行右移 4個字母替代,即“n”往后移 4個字母,得到的是“r”,如下表所示:
③經(jīng)過數(shù)字密鑰串處理后,將字符串中的每個字符轉(zhuǎn)換為 8位二進制 ASCII碼值(不足 8位的左邊補 0,補足 8位),并分成兩段(左邊 4位為高四位,右邊 4位為低四位),如字符“i”的二進制 ASCII碼值為 01101001,高四位為 0110,低四位為 1001;
④將高四位轉(zhuǎn)化為十六進制數(shù)(如 0110轉(zhuǎn)化為 6);
⑤將低四位與高四位執(zhí)行異或(⊕)操作后轉(zhuǎn)化為十六進制數(shù)(提示:0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0,如 1001⊕0110=1111,1111轉(zhuǎn)化為 F);
⑥依次連接④⑤得到的兩位十六進制數(shù),即為該字符的密文,如“i”的密文為“6F”;
⑦將每個字符的密文按照順序依次連接即為最終的密文。程序運行結(jié)果如圖所示。
實現(xiàn)上述功能的 Python程序如下,請回答下列問題:
def xor(x,y): #兩個一位二進制數(shù)異或
if x==y:
return "0"
else:
return "1"
def DtoB(D): #十進制轉(zhuǎn) 8位二進制,高位段和低位段根據(jù)規(guī)則處理
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("請輸入數(shù)字密鑰串:")
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)