1.计算密钥平均值k:
密钥中的英文字符,按字母表位序代表其数值。例:输入密钥Ab7得到的密钥平均值k为(1+2+7)//3=3;
2.根据k对明文加密:
①遇到英文字符,则按凯撒密码加密,后移k位,例:k=3,则"a"加密后为"d"。
②遇到数字字符,则将k和该数字异或,再把异或结果转为十进制并加"#"。例:k=3,对应的二进制为"11"; 明文字符"2",对应的二进制为"10";异或二进制结果为"01",对应的密文为"1#"。
(异或⊕运算:先把参与运算的数转换为二进制,再进行按位运算。可参考图2)
③其他字符保持不变。
④逆序输出,得到最终密文。
#主程序
ming=input("请输入明文:")
key=input("请输入密钥:")
k=ave(key) #计算平均密钥值
mw=""
for i in ming:
if ''0 ''<=1<=9''.
mw=str(yh(i,k))+"#"+mw
elif"a"<=i<="z" or "A"<=i<="Z":
mw=ks(i,k)+mw
elifi in "!@$%&~":
mw=i+mw
else:print("输入有误,请重新输入")
break
print("加密后密文:"+mw)
图1 图2
(1)主程序用到了(2)计算平均密钥值
def ave(key):
s=0
for i in key:
if ''a''<=i<=''z'' or ''A'' <=i<="Z'':
s+=
elif ''0''<=i<="9";
s+=int(i)
k=s//len(key)
return k
(3)进制相互转换def DtB(x):#十进制转二进制
if x==0:
return "0"
s=""
while x>0:
r=x%2
①
x=x//2
return s
def BtD(s):#二进制转十进制x=0
for i ins :
②
return x
(4)数字进行异或加密def yh(ming,key):
s1=DtB(int(ming))
s2=DtB(key)
if len(s1)<len(s2):
s1,s2=s2,s1
s2="0"*(len(s1)-len(s2))+s2 #在s2前补0使其与s1长度一致
res=""
for i in range(len(s1)):
res=
mw=BtD(res)
return mw
#英文字母进行凯撒加密ks(ming,key)代码省略
同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

