【发布时间】:2021-11-01 19:16:17
【问题描述】:
我目前正在为我的大学举办 CTF 比赛。我们的挑战之一将使用凯撒密码来解决基本标志之一。在创建将创建我们的密文的代码时,我注意到创建凯撒密码程序的一种非常常见的方法是利用字符串库。
更具体地说,他们将首先检查字母是大写还是小写,或者定义一个可接受的“字母表”列表
例如。这将是
import string
def caesar(text, shift, alphabets):
def shift_alphabet(alphabet):
return alphabet[shift:] + alphabet[:shift]
shifted_alphabet = tuple(map(shift_alphabet, alphabets))
final_alphabet = ''.join(alphabets)
final_shifted_alphabet = ''.join(shifted_alphabet)
table = str.maketrans(final_alphabet, final_shifted_alphabet)
return text.translate(table)
message = "This is a message."
print(caesar(message, 7, [string.ascii_uppercase, string.ascii_lowercase, string.punctuation]))
我对字符串的了解(并且我已经使用string.ascii_letters 测试过它)是我可以使用上述string.ascii_letters 归档相同的结果,而不是检查是大写还是小写。
我找不到答案是为什么人们会决定这样做而不是使用全部捕获.ascii_letters。
有性能损失吗?或者只是单独检查的好习惯?
【问题讨论】:
-
potayto/potahto,最后你用maketrans 喂的完全一样
-
欢迎来到 Stack Overflow!请拨打tour。请edit这个问题有一个更具描述性的标题。有关更多提示,请参阅How to Ask。
-
好的!非常感谢@diggusbiccus
标签: python python-3.x string