您的密码是否安全?学习如何使用 Raycast 来生成更安全的密码 🔒

607 阅读1分钟

在今天的数字时代,使用安全密码是非常重要的。为了防止被黑客攻击,我们需要使用足够强大的密码,其中包含大小写字母、数字和符号。

在 Python 中,我们可以轻松生成这样的密码。今天,我们将介绍如何在 Python 中使用 Raycast 生成符合我们要求的密码。Raycast 是一个 Mac 平台上的命令行工具,可以帮助我们更加高效地执行常用的操作。

创建 Raycast script-commands

971shots_so.png

618shots_so.png

参考:Generate Password

#!/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)