没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:周思宇|2023-05-31 11:54:32.157|阅读 54 次
概述:本文介绍如何创建更好的密码短语,使其更容易记忆,并且更难被破解,欢迎查阅!
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
JetBrains是一家尖端的软件供应商,专门创建智能开发工具,包括IntelliJ IDEA--领先的Java IDE,以及Kotlin编程语言。无论你的团队是大是小,我们的产品将确保其在构建和发送代码、计划工作和协作时始终有一个顺利和愉快的体验。无论你用什么平台或语言工作,JetBrains都有适合你的开发工具。
PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。
在上篇文章中,我们学习了密码短语、密码短语生成器的概念并生成了第一个密码短语,本文继续介绍如何创建更好的密码短语,使其更容易记忆,并且更难被破解。
您可能已经注意到,在上一步中生成的密码短语有点难读。如何将每个单词大写以提高可读性?
我们在此应用程序中使用 Typer,因为我们不想只运行脚本并获取密码。我们需要创建一个命令行界面,以便我们可以将各种选项传递给脚本,从而控制生成的密码的属性。一种选择是将单词大写。
当我们运行main.py时,会执行以下行:
... if __name__ == "__main__": typer.run(main)
所以,我们将使用typer来执行main函数。我们这样做是因为 Typer 可以接受命令行参数,然后将它们作为参数传递给函数。
让我们capitalize在main()函数中引入参数并使其False默认:
def main(capitalize = False): sub_nouns = read_words('sub_nouns.txt') ... passphrase = ''.join(phrase_words) print(passphrase)
根据 Python 编码最佳实践,我们应该指定参数类型。将插入符号放在上面capitalize并按⌥Enter / Alt+Enter。然后选择Specify type for the reference using annotation。Type bool,因为它capitalize应该有一个Boolean值。
现在,如果capitalize为True,让我们在连接单词之前将它们大写。以if大写:开始if语句。让我们以类似于修复read_words函数时使用的方式来实现它,只不过这次我们将使用一个活动模板,而不是手动编写列表推导式。输入“compl”并按“Enter”。然后指定列表推导式的所有元素,并按Tab键移动到下一个元素。
你将得出:
def main(capitalize: bool = False): sub_nouns = read_words('sub_nouns.txt') verbs = read_words('verbs.txt') adjectives = read_words('adjectives.txt') obj_nouns = read_words('obj_nouns.txt') word_bank = [sub_nouns, verbs, adjectives, obj_nouns] phrase_words = [] for word_list in word_bank: random_word = random.SystemRandom().choice(word_list) phrase_words.append(random_word) if capitalize: phrase_words = [phrase_word.capitalize() for phrase_word in phrase_words] passphrase = ''.join(phrase_words) print(passphrase)
为了确保大写字母正常运行,我们需要在运行main.py时将capitalize作为参数传递。要实现这一点,让我们编辑运行配置。在IDE窗口的顶部寻找Run小部件:
您可以使用这个小部件来选择所需的运行配置,以及在运行或调试模式下启动它。当我们单击gutter图标并启动脚本时,PyCharm已经创建了主配置。单击配置名称,打开菜单,选择Edit configurations:
在打开的对话框中,在Parameters字段中指定——capitalize:
单击OK保存更新后的配置。然后单击小部件中的Run图标。
结果如下:
为了更好的可读性,我们可以将密码短语中的单词分开。使用特殊字符作为分隔符可以达到双重目的,因为它可以让我们生成符合特定密码复杂度要求的密码短语。
按如下方式编辑main()函数的倒数第二行:
def main(capitalize: bool = False): ... passphrase = separator.join(phrase_words)
PyCharm用一条红色波浪线突出显示分隔符,因为函数还没有这个参数。将鼠标悬停在它上面,并在弹出窗口中选择创建参数“separator”。然后将“”指定为默认值,因为在默认情况下我们不想添加任何分隔符。
我们还指定str作为参数类型。你应该得出以下内容:
def main(capitalize: bool = False, separator: str = ''): ... passphrase = separator.join(phrase_words) print(passphrase)
现在,更新运行配置。单击Run小部件,选择Edit configurations,并在Parameters字段中添加新参数:
运行配置查看结果:
现在你可以用特殊字符和数字来分隔密码中的单词。您甚至可以使用几个符号来满足各种网站的密码要求,例如“#4”或“%7”。
密码短语越长,成功暴力攻击需要尝试的次数就越多。让我们在密码中加入一个额外的单词。
首先,我们将准备第五个包含副词的单词列表,并将其放在项目目录中。将bool类型的long参数添加到main()函数的签名中。根据这个参数(该参数是可选的,默认设置为False),我们将向word_bank添加另一个单词列表:
def main(capitalize: bool = False, separator: str = '', long: bool = False): ... word_bank = [sub_nouns, verbs, adjectives, obj_nouns] if long: adverbs = read_words('adverbs.txt') word_bank.append(adverbs) ...
这一次,让我们使用内置终端来运行脚本。按Ctrl +F12 / Alt+F12,在打开的终端工具窗口中输入以下命令:
python main.py --capitalize --separator "1_" --long
你应该得到类似下面内容的结果:
如果您以前使用过CLI工具,就会知道它们通常只允许用户使用一个字母指定参数。让我们将此功能也添加到我们的工具中。为了更好的代码可读性,让我们重新格式化函数签名,以便每个参数都在单独的行上:
def main( capitalize: bool = False, separator: str = '', long: bool = False ): ...
然后将每个参数的默认值替换为type。选项(<default_value>, <long_name>, <short_name>):
下面是main()的最终签名:
def main( capitalize: bool = typer.Option(False, '--caps', '-c'), separator: str = typer.Option('', '--separator', '-s'), long: bool = typer.Option(False, '--long', '-l') ): ...
现在我们可以一起指定所有选项。分隔符(' -s ')应该放在最后,因为它后面需要一个字符串:
默认情况下,type还添加了——help选项。现在让我们看看它是如何工作的:
我们可以理解存在哪些参数以及它们的长、短名称。如何添加注释来解释它们的实际作用?为main()的每个参数添加help如下:
现在——help产生了更多有用的信息:
您可能希望使用没有PyCharm的密码短语生成器,例如在系统终端中。在这种情况下,您应该使用以下命令将type安装到系统解释器中:
python3 -m pip install --user typer
以上便是如何创建更好的密码短语的全部内容,如果您有其他问题也可以继续浏览本系列文章,获取相关教程,你还可以给我留言或者加入我们的官方技术交流群。
欢迎下载|体验更多Jetbrains产品
获取更多信息请咨询慧都在线客服 ;Jetbrains技术交流群(QQ):786598704
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
Parasoft Virtualize通过智能变更顾问、自动化工作流和全面版本控制三大核心功能,为企业提供了高效的虚拟化测试环境管理方案。它不仅大幅降低了维护成本和工作量,还确保了虚拟服务与真实环境的实时同步,显著提升了测试效率和可靠性。
Parasoft SOAtest凭借其精准消息推送、智能监听和高效依赖隔离的能力,为响应式微服务架构的测试提供了强有力的支持。它不仅解决了异步通信复杂、依赖服务多等测试难题,还通过模拟真实场景和简化测试环境,显著提升了测试效率和覆盖率。
作为一款面向全组织的CAD文件可视化与交互软件,SpinFire Insight支持多种主流2D和3D CAD格式,无需单独购买繁杂的CAD软件授权,即可实现对CAD模型的统一查看、分析和沟通,让企业内部及外部团队之间的跨部门、跨公司协作更加顺畅高效。
用于创建、存储和传输文档的 FastReport 产品线已通过新的开发进行了扩展。自 2025 年 5 月起,该产品线包含 Cloud、Corporate Server 和 Publisher 等产品。在本文中,我们将详细介绍这些服务如何满足不同的用户需求,以便您选择最符合您需求的解决方案。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号