第一步:将明文字符串中每个字符的8位二进制ASCI 码(不足8位的左端补足0)的左右各4位两段交换顺序,得到一个新的8位二进制数,如字符“A ”的二进制ASCII 码为01000001,处理后得到的新二进制数为00010100,再转换为十进制数20。经过该处理,明文字符串中的每个字符都转换为一个十进制整数。
第二步:利用密钥字符串的ASCⅡ 码依次对第一步得到的相应数值进行异或处理,可得到一个新的十进制数,例如20与密钥“a”的ASCⅡ 码异或得到117。密钥位数不够可循环使用,例如密钥为“ab3y”,循环使用如表所示。
明文(整数) | 20 | …… | … · | … · | … · | …… | … · | …… | … · | |
密钥 | a | b | 3 | y | a | b | 3 | y | a | b |
密文(整数) | 117 | …… | …… | … · | …… | …… | …… | … | … | … · |
例如:明文字符串为“Ab12cxy”,密钥为“ab3y”,经过第一步处理得到的整数集为[20,38,19,35,54,135,151]; 再将该整数集依次与密钥进行异或处理,最后将处理结果用逗号连接,得到密文为117,68,32,90,87,229,164。
(1)若明文字符串为“a”,密钥为“a”,经过上述加密处理后的密文为
(2)定义如下encodex(str 1)函数,该函数的功能是实现 该加密算法的第一步。
def encodex(str_1):
n=len(str_1)
str_2=[0]*n
i=0
for i in range(n):
p=ord(str_1[i])
q=(p//16)+(p%16)*16
str 2[i]=q
return str_2
上面Python程序划线处实现一个字符的8位二进制 ASCⅡ 码(不足8位的左端补足0)左右各4位两段交换顺序,若将加密算法改成左2位右6位两段交换顺序,划线处代码应该修改为
(3)实现加密算法的剩余部分Python程序如下,请在划线处填入合适的代码。
def encodey(str_2,keys):
q=[0]*1000
head,tail=0,0
for item in keys:
①
tail+=1
str_3=""
for item in str_2:
keyx=q[head]
②
head+=1;tail+=1
tmp=item^keyx #^ 是异或运算
str_3+=str(tmp)+","
str_3=str_3.strip(",") #去除字符串末尾的逗号
return str _3
str_l=input("请输入准备加密的明文:")
keys=input("请输入密钥:")
str_2=encodex(str_1)
print("加密后的密文:", ③

同类型试题

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

