【问题标题】:How to optimize Python simple encryption?如何优化 Python 简单加密?
【发布时间】:2021-05-10 02:45:54
【问题描述】:

所以我在 Python 中做了一个简单的密码,现在试图弄清楚如何优化它。

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

a becomes ab, b becomes ba, etc

我的目标是迭代编码,类似于:

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

现在我只是想优化它,想知道最好的方法是什么?

*lock 可以传递例如 [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

【问题讨论】:

  • 函数在 O(n) 时间内运行,其中 n 是消息的长度。你说的优化是什么意思?一个建议是删除声明message = encrypted,因为它除了将原始消息替换为加密版本之外没有任何作用,如果需要也可以在返回后完成。
  • 我的目标是加密加密的消息,这个语句更新已经加密的消息变量,再次加密等等。我正在努力寻找一种更好的方法来优化这个过程。
  • 优化是什么意思。如果我给你一个不同的方法,你将如何确定它相对于你的最优性?

标签: python python-3.x optimization encryption


【解决方案1】:

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

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

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

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

显然,这是否更有效取决于消息长度和每个字符的“重复”次数。

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

【讨论】:

  • 感谢您的回答!我会调查的。
  • 进一步的优化是将第二个循环替换为.translate
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多