我正在构建一种加密算法。它首先获取您想要加密的消息和一个可以超过 8 位数字的加密密钥。 它获取消息,使用 Python 中的“for”将每个字符分开,并将它们放入名为“char”的变量中。现在,它检查 ord(char) + 加密密钥是奇数还是偶数。如果它是偶数,那么它会减去该键的ord(char)。如果它是奇数,那么它会添加。它通过 chr() 将这些数字转换为字符,并且在该过程传递每个字符后,它向用户显示输出
现在,您可能已经注意到,如果假设 ord(char) + key 的结果是奇数,并且数字超过 1114111(即可用的 unicode 点的数量),在这种情况下它使用此算法 -
checkpoint = key - (1114111 - ord(char))
if checkpoint < 1114111:
mes += chr(checkpoint)
else:
mes += chr(checkpoint % 1114111)
并且如果 ord(char) + key 是偶数并且如果 key 大于 ord(char),那么它将使用 this-
checkpoint = key - (1114111 - ord(char))
if checkpoint < 1114111:
mes += chr(checkpoint)
else:
mes += chr(checkpoint % 1114111)
我的程序的问题是,当我使用解密时,并且 ord(char) + key 是奇数且超过 1114111,它只会给我错误的解密。我的测试表明了这一点,但我不知道如何解决这个问题。如果您能更正我的代码,或者您发现这个问题有不同的变化或新的方法,我将非常感激。我已经发布了两个程序的完整代码(加密和解密)-
# encryption
code = str(input('Write your message, \t'))
key = int(input('Write your encryption key, use only numbers, \t'))
mes = ''
for char in code:
if (ord(char) + key) % 2 != 0:
if (ord(char) + key) <= 1114111:
mes += chr(ord(char) + key)
else:
checkpoint = key - (1114111 - ord(char))
if checkpoint < 1114111:
mes += chr(checkpoint)
else:
mes += chr(checkpoint % 1114111)
else:
if ord(char) > key:
mes += chr(ord(char) - key)
else:
c
print(f'this is your encrypted messsage- {mes}')
# decryption
code = str(input('Write your encrypted message, \t'))
key = int(input('Write your encryption key, \t'))
mes = ''
for char in code:
if (ord(char) % 2) == (key % 2):
if (ord(char) + key) % 2 != 0:
if (ord(char) + key) <= 1114111:
mes += chr(ord(char) + key)
else:
checkpoint = key - (1114111 - ord(char))
if checkpoint < 1114111:
mes += chr(checkpoint)
else:
mes += chr(checkpoint % 1114111)
else:
if ord(char) > key:
mes += chr(ord(char) - key)
else:
checkpost = (key - ord(char))
if checkpost < 1114111:
mes += chr(checkpost)
else:
mes += chr(key % 1114111)
else:
if (ord(char) + key) % 2 == 0:
if (ord(char) + key) <= 1114111:
mes += chr(ord(char) + key)
else:
checkpoint = key - (1114111 - ord(char))
if checkpoint < 1114111:
mes += chr(checkpoint)
else:
mes += chr(checkpoint % 1114111)
else:
if ord(char) > key:
mes += chr(ord(char) - key)
else:
checkpost = (key - ord(char))
if checkpost < 1114111:
mes += chr(checkpost)
else:
mes += chr(key % 1114111)
print(f'this is your decrypted messsage "{mes}"')
使用功能
def encrypt(message: list[int], key: int, max_value: int) -> list[int]:
def decrypt(message: list[int], key: int, max_value: int) -> list[int]:
这些应该执行加密/解密,而不执行其他操作 - 没有输入,没有打印。只需完成工作并返回结果从更简单的源数据开始
message=[1,2,3,4,5]
、
key=7
和
max=9
都是不错的选择抛弃“输入”
学习使用调试器
学习自动测试
def test_1():
message = [1,2,3,4,5]
key = 7
max_val = 9
a = encrypt(message, key, max_val)
b = decrypt(a, key, max_val)
assert b == message