如何用实用脚本自动生成随机密码?

wen 实用脚本 3

本文目录导读:

如何用实用脚本自动生成随机密码?

  1. 核心Python脚本(推荐)
  2. 单行命令(快速使用)
  3. 增强版脚本(带密码强度检查)
  4. 批量生成密码(输出到文件)
  5. 安全建议

核心Python脚本(推荐)

#!/usr/bin/env python3
import secrets
import string
import argparse
import sys
def generate_password(length=16, use_digits=True, use_punctuation=True):
    """生成安全的随机密码"""
    # 基础字符集:大小写字母
    chars = string.ascii_letters
    if use_digits:
        chars += string.digits
    if use_punctuation:
        chars += string.punctuation
    if len(chars) < 4:  # 安全检查
        print("错误:字符集过小", file=sys.stderr)
        sys.exit(1)
    # 使用secrets模块保证密码安全性(适合密码学应用)
    password = ''.join(secrets.choice(chars) for _ in range(length))
    return password
def main():
    parser = argparse.ArgumentParser(description='生成随机密码')
    parser.add_argument('-l', '--length', type=int, default=16, help='密码长度 (默认: 16)')
    parser.add_argument('-nd', '--no-digits', action='store_true', help='排除数字')
    parser.add_argument('-np', '--no-punctuation', action='store_true', help='排除特殊字符')
    args = parser.parse_args()
    if args.length < 8:
        print("警告:建议密码长度至少8位", file=sys.stderr)
    password = generate_password(
        length=args.length,
        use_digits=not args.no_digits,
        use_punctuation=not args.no_punctuation
    )
    print(password)
if __name__ == "__main__":
    main()

使用示例:

# 生成16位密码(含数字和特殊字符)
python passgen.py
# 生成32位纯字母密码
python passgen.py -l 32 -nd -np
# 生成20位密码(仅含字母和数字)
python passgen.py -l 20 -np

单行命令(快速使用)

Linux/macOS(使用openssl):

# 16位密码,包含各类字符
openssl rand -base64 12 | tr -d '\n' | head -c 16 && echo
# 更安全的版本(urandom)
cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+' | head -c 16 && echo

Windows PowerShell:

# 生成16位密码
-join ((48..57) + (65..90) + (97..122) + (33..47) | Get-Random -Count 16 | % {[char]$_})

增强版脚本(带密码强度检查)

#!/usr/bin/env python3
import secrets
import string
import re
def create_strong_password(length=20):
    """生成符合常见密码策略的强密码"""
    # 至少包含每个类别的一个字符
    all_chars = string.ascii_letters + string.digits + string.punctuation
    # 先确保包含各类字符
    password = [
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation)
    ]
    # 填充剩余长度
    password += [secrets.choice(all_chars) for _ in range(length - 4)]
    # 随机打乱顺序
    secrets.SystemRandom().shuffle(password)
    return ''.join(password)
def password_strength(password):
    """评估密码强度(返回0-100分数)"""
    score = 0
    if len(password) >= 12: score += 20
    if len(password) >= 16: score += 10
    if re.search(r'[a-z]', password): score += 15
    if re.search(r'[A-Z]', password): score += 15
    if re.search(r'\d', password): score += 20
    if re.search(r'[!@#$%^&*(),.?":{}|<>]', password): score += 20
    return score
# 使用示例
pwd = create_strong_password(24)
print(f"生成的密码: {pwd}")
print(f"密码强度: {password_strength(pwd)}/100")

批量生成密码(输出到文件)

#!/bin/bash
# 批量生成多个密码到文件
COUNT=10
LENGTH=20
for i in $(seq 1 $COUNT); do
    openssl rand -base64 20 | tr -d '/+=' | cut -c1-$LENGTH
done > passwords.txt
echo "已生成 $COUNT 个密码,保存到 passwords.txt"

安全建议

  1. 使用专业的密码管理器(如LastPass, Bitwarden)管理生成的密码
  2. 密码长度应至少12位,推荐16-20位
  3. 避免使用常见模式(如password123, admin2024等)
  4. 不同网站使用不同密码,不要重复使用
  5. 启用多因素认证(2FA/MFA)作为额外保护

这些脚本可以满足日常开发、服务器配置、临时账户创建等场景的需求,记得根据实际需求调整密码长度和字符集。

抱歉,评论功能暂时关闭!