如何优化Python简单加密?

如何优化Python简单加密?,python,python-3.x,optimization,encryption,Python,Python 3.x,Optimization,Encryption,因此,我在Python中做了一个简单的密码,现在试图找出如何优化它 我有一个wordslibrary=['ab',ba','ac'…](library.length=127)和输入字符串的每个字符,我用库中的单词编码,例如 a becomes ab, b becomes ba, etc 我的目标是迭代编码,类似于: [iterations = 3] ab -> abba -> abbabaab -> abbaabbaababba import string def enc

因此,我在Python中做了一个简单的密码,现在试图找出如何优化它

我有一个words
library=['ab',ba','ac'…]
(library.length=127)和输入字符串的每个字符,我用库中的单词编码,例如

a becomes ab, b becomes ba, etc
我的目标是迭代编码,类似于:

[iterations = 3] ab -> abba -> abbabaab -> abbaabbaababba
import string

def encode(message, locks=[0]):
for key in locks:
    encrypted = ''
    char_map = {}
    for letter in string.ascii_lowercase:
        char_map[letter] = library[(ord(char) + key) % 128] + " "
    for char in message:
        encrypted += char_map[char]
    message = encrypted
return message
现在我只是想选择它,想知道什么是最好的方法

*例如,可以传递锁[31,51,41],其中数字表示要编码的库的移位

library = ['ab', 'ba', 'bc' ...]

def encode(message, locks=[0]):
    for key in locks:
        encrypted = ''
        for char in message:
            encrypted += library[(ord(char) + key) % 128] + " "
        message = encrypted
    return encrypted

这里一个潜在的低效是,您为输入字符串中的每个字符计算并查找适当的库字。这意味着如果一个字符重复,您将执行两次此计算

首先生成所有潜在输入字符到单词的“映射”,然后为消息中的每个字符查找合适的单词,可能会更有效

例如,假设您的消息只包含小写字符,您可以执行以下操作:

[iterations = 3] ab -> abba -> abbabaab -> abbaabbaababba
import string

def encode(message, locks=[0]):
for key in locks:
    encrypted = ''
    char_map = {}
    for letter in string.ascii_lowercase:
        char_map[letter] = library[(ord(char) + key) % 128] + " "
    for char in message:
        encrypted += char_map[char]
    message = encrypted
return message
显然,这是否有效取决于消息长度和每个字符的“重复”次数


然而,经常发生的一个“重复”是在每个字符之间添加一个空格。随着时间的推移,加密这些空格将增加大量开销,因此您肯定希望在每个循环中将“空格”映射到它的字一次,即使您不为其他字符执行此操作。

该函数在O(n)时间内运行,其中n是消息的长度。你说的优化是什么意思?一个建议是删除语句
message=encrypted
,因为它除了用加密版本替换原始消息外,什么都不做,如果需要,也可以在返回后执行。我的目标是加密加密消息,此语句使用已加密的,再次加密,等等。我正试图找到一个更好的方法来优化这个过程。你说的优化是什么意思。如果我给你一个不同的方法,你将如何确定它相对于你的最优?谢谢你的回答!我将对此进行研究。进一步的优化是将第二个循环替换为
.translate