加密后不能还原
有一道竞赛题是这样出的:
编程完成数据加密。数据是五位的整数,加密规则为:每个数字都加上6,
然后用和除以8的余数替代该数字,再将第一位和第五位交换,第二位和第四位交换。
try:
n = int(input("Please enter a five digit integer:\n"))
if n < 10000 or n >= 100000:
print("Input error")
exit()
'''加密'''
string_num = str(n)
encryption = []
for p in string_num:
encryption.append((int(p) + 6) % 8)
encryption[0], encryption[4] = encryption[4], encryption[0]
encryption[1], encryption[3] = encryption[3], encryption[1]
for i in range(5):
print(encryption[i], end='')
print()
'''解密,不能一一对应,因为8和0加密后都为6,9和1加密后都为7'''
base = [x for x in range(0, 10)]
decrypt = [x for x in encryption]
decrypt[0], decrypt[4] = decrypt[4], decrypt[0]
decrypt[1], decrypt[3] = decrypt[3], decrypt[1]
i = 0
while i < 5:
for p in base:
if (p + 6) % 8 == decrypt[i]:
decrypt[i] = p
i += 1
break
for i in range(5):
print(decrypt[i], end='')
except ValueError:
print("Input error")
解码正确的情况:
D:\Python\study\venv\Scripts\python.exe D:/Python/study/竞赛题5.py
Please enter a five digit integer:
70261
74065
70261
Process finished with exit code 0
解码不正确的情况:
D:\Python\study\venv\Scripts\python.exe D:/Python/study/竞赛题5.py
Please enter a five digit integer:
98989
76767
10101
Process finished with exit code 0