在今天的数字时代,使用安全密码是非常重要的。为了防止被黑客攻击,我们需要使用足够强大的密码,其中包含大小写字母、数字和符号。
在 Python 中,我们可以轻松生成这样的密码。今天,我们将介绍如何在 Python 中使用 Raycast 生成符合我们要求的密码。Raycast 是一个 Mac 平台上的命令行工具,可以帮助我们更加高效地执行常用的操作。
创建 Raycast script-commands
#!/usr/bin/env python3
# 必填参数:
# @raycast.schemaVersion 1
# @raycast.title Generate Password
# @raycast.mode silent
# @raycast.packageName Security
# 可选参数:
# @raycast.icon images/genpasswd.png
# @raycast.iconDark images/genpasswd-iconDark.png
# 说明文档:
# @raycast.description 生成一个类似于 iOS 风格的密码
# @raycast.author everdrone
# @raycast.authorURL https://github.com/everdrone
# @raycast.argument1 {"type": "text", "placeholder": "集合数 (3)", "optional": true}
# @raycast.argument2 {"type": "text", "placeholder": "长度 (6)", "optional": true}
import sys
import string
import random
import subprocess
from textwrap import wrap
def charset(length: int = 6, symbols: str = '!@#$%^&*()_+-=') -> str:
password_characters = string.ascii_lowercase + string.ascii_uppercase + string.digits + symbols
return ''.join(random.choice(password_characters) for i in range(length))
def superset(
length: int = 3,
set_length: int = 6,
numbers: int = 1,
uppercase: int = 1,
symbols: str = '!@#$%^&*()_+-=',
separator: str = '-'
) -> str:
sets = []
for _ in range(length):
sets.append(charset(set_length, symbols))
all = ''.join(sets)
# 插入大写字母
for _ in range(uppercase):
pick_again = True
while pick_again:
index = random.randrange(len(all))
if all[index].isalpha() and all[index].islower():
pick_again = False
all = list(all)
all[index] = all[index].upper()
all = ''.join(all)
# 插入数字
for _ in range(numbers):
pick_again = True
while pick_again:
index = random.randrange(len(all))
if all[index].isalpha() and all[index].islower():
pick_again = False
all = list(all)
all[index] = random.choice(string.digits)
all = ''.join(all)
# 使用分隔符分割并拼接
sets = wrap(all, set_length)
result = separator.join(sets)
subprocess.run("pbcopy", universal_newlines=True, input=result)
return result
# 如果未提供参数,则使用默认值
sets = int(sys.argv[1]) if len(sys.argv) > 1 and sys.argv[1].isdigit() else 3
s_len = int(sys.argv[2]) if len(sys.argv) > 2 and sys.argv[2].isdigit() else 6
# 将生成的密码复制到剪贴板中
generatedPassword = superset(length=sets, set_length=s_len)
subprocess.run("pbcopy", universal_newlines=True, input=generatedPassword)
print(generatedPassword)