Python unicode 加密算法

问题描述 投票:0回答:1

我正在构建一种加密算法。它首先获取您想要加密的消息和一个可以超过 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}"')
    
python algorithm math encryption unicode
1个回答
0
投票
不回答您的问题,只是提供一些希望有帮助的建议。

使用功能

创建两个函数

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
都是不错的选择

抛弃“输入”

现实世界的程序很少使用控制台输入。使用硬编码值调试代码,准备好后,调整您的程序以使用命令行参数。

学习使用调试器

在 VSCode 中,从菜单中选择“运行”->“开始调试”。逐步执行您的代码并观察变量。

学习自动测试

创建多个测试函数,使用不同的输入运行算法,并确保它们都返回正确的结果,例如

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
    
© www.soinside.com 2019 - 2024. All rights reserved.