如何用脚本生成随机密码短语

wen 实用脚本 3

本文目录导读:

如何用脚本生成随机密码短语

  1. Bash 脚本(Linux/Unix)
  2. Python 脚本(跨平台)
  3. Node.js 脚本
  4. PowerShell 脚本(Windows)
  5. 安全建议

Bash 脚本(Linux/Unix)

#!/bin/bash
# 单词列表文件路径(每行一个单词)
WORD_FILE="/usr/share/dict/words"
# 生成密码短语
generate_passphrase() {
    local words=4  # 单词数量
    local separator="-"  # 分隔符
    # 如果单词文件不存在则创建简单列表
    if [[ ! -f "$WORD_FILE" ]]; then
        cat > /tmp/words.txt << EOF
apple
banana
cherry
dragon
eagle
forest
garden
hunter
island
jungle
knight
lemon
mountain
noble
ocean
piano
queen
river
silver
tiger
EOF
        WORD_FILE="/tmp/words.txt"
    fi
    # 获取单词总数
    total=$(wc -l < "$WORD_FILE")
    # 随机选择单词
    phrase=""
    for ((i=0; i<words; i++)); do
        rand=$((RANDOM % total + 1))
        word=$(sed -n "${rand}p" "$WORD_FILE")
        # 首字母大写
        word="$(tr '[:lower:]' '[:upper:]' <<< ${word:0:1})${word:1}"
        phrase="${phrase}${word}${separator}"
    done
    # 移除最后一个分隔符
    phrase="${phrase%$separator}"
    # 添加数字和特殊字符增强安全性
    number=$((RANDOM % 99 + 10))
    special=("@" "#" "$" "%" "&" "!" "?")
    rand_special=${special[$((RANDOM % ${#special[@]}))]}
    echo "${phrase}${rand_special}${number}"
}
generate_passphrase

Python 脚本(跨平台)

import random
import string
import os
def generate_passphrase(
    num_words=4,
    separator="-",
    capitalize=True,
    include_numbers=True,
    include_special=True
):
    """
    生成随机密码短语
    参数:
        num_words: 单词数量
        separator: 单词分隔符
        capitalize: 是否首字母大写
        include_numbers: 是否包含数字
        include_special: 是否包含特殊字符
    """
    # 预定义单词列表(可根据需要扩展)
    word_list = [
        "apple", "banana", "cherry", "dragon", "eagle",
        "forest", "garden", "hunter", "island", "jungle",
        "knight", "lemon", "mountain", "noble", "ocean",
        "piano", "queen", "river", "silver", "tiger",
        "amber", "blaze", "coral", "dawn", "ember",
        "frost", "glade", "hazel", "ivory", "jade",
        "koala", "lunar", "mist", "nova", "opal",
        "pearl", "quartz", "raven", "solar", "topaz",
        "ultra", "vivid", "willow", "xenon", "yacht", "zebra"
    ]
    # 确保有足够多的单词
    if num_words > len(word_list):
        raise ValueError(f"只能选择最多 {len(word_list)} 个单词")
    # 随机选择单词
    selected_words = random.sample(word_list, num_words)
    # 首字母大写处理
    if capitalize:
        selected_words = [word.capitalize() for word in selected_words]
    # 连接单词
    phrase = separator.join(selected_words)
    # 添加数字
    if include_numbers:
        numbers = ''.join(random.choices(string.digits, k=2))
        phrase += numbers
    # 添加特殊字符
    if include_special:
        special_chars = "!@#$%^&*()_+-=[]{}|;:,.<>?"
        special = random.choice(special_chars)
        phrase += special
    # 随机打乱位置
    phrase_list = list(phrase)
    random.shuffle(phrase_list)
    return ''.join(phrase_list)
def generate_secure_phrase():
    """生成更安全的密码短语"""
    # 使用系统随机源
    import secrets
    words = secrets.SystemRandom().choice([
        "Avalanche", "Blizzard", "Cascade", "Diamond", "Eclipse",
        "Falcon", "Galaxy", "Horizon", "Infinity", "Jupiter",
        "Kinetic", "Liberty", "Magnetic", "Neptune", "Orbit",
        "Photon", "Quantum", "Radar", "Saturn", "Titan"
    ] for _ in range(3))
    # 使用 secrets 模块生成安全随机数
    number = secrets.randbelow(899) + 100
    special = secrets.choice("!@#$%^&*")
    return f"{words[0]}-{words[1]}-{words[2]}{special}{number}"
# 使用示例
if __name__ == "__main__":
    print("简单密码短语:", generate_passphrase())
    print("安全密码短语:", generate_secure_phrase())
    print("自定义配置:", generate_passphrase(
        num_words=5,
        separator="_",
        capitalize=False,
        include_numbers=True,
        include_special=False
    ))

Node.js 脚本

const crypto = require('crypto');
// 单词列表
const WORDS = [
  'apple', 'banana', 'cherry', 'dragon', 'eagle',
  'forest', 'garden', 'hunter', 'island', 'jungle',
  'knight', 'lemon', 'mountain', 'noble', 'ocean',
  'piano', 'queen', 'river', 'silver', 'tiger'
];
/**
 * 生成密码短语
 * @param {number} numWords 单词数量
 * @param {string} separator 分隔符
 * @param {boolean} capitalize 是否首字母大写
 * @returns {string}
 */
function generatePassphrase(numWords = 4, separator = '-', capitalize = true) {
  // 使用密码学安全的随机数生成器
  const randomBytes = crypto.randomBytes(numWords);
  let selectedWords = [];
  for (let i = 0; i < numWords; i++) {
    // 使用随机字节索引单词
    const index = randomBytes[i] % WORDS.length;
    let word = WORDS[index];
    if (capitalize) {
      word = word.charAt(0).toUpperCase() + word.slice(1);
    }
    selectedWords.push(word);
  }
  // 基础短语
  let passphrase = selectedWords.join(separator);
  // 添加随机数字 (100-999)
  const numbers = Math.floor(crypto.randomBytes(1)[0] / 255 * 900 + 100);
  passphrase += numbers;
  // 添加随机特殊字符
  const specialChars = '!@#$%^&*()_+-=[]{}|;:,.<>?';
  const specialIndex = crypto.randomBytes(1)[0] % specialChars.length;
  passphrase += specialChars[specialIndex];
  return passphrase;
}
// 使用示例
console.log('生成的密码短语:', generatePassphrase());
console.log('自定义短语:', generatePassphrase(5, '_', false));

PowerShell 脚本(Windows)

function New-RandomPassphrase {
    param(
        [int]$WordCount = 4,
        [string]$Separator = "-",
        [switch]$Capitalize = $true
    )
    # 单词列表
    $wordList = @(
        "apple", "banana", "cherry", "dragon", "eagle",
        "forest", "garden", "hunter", "island", "jungle",
        "knight", "lemon", "mountain", "noble", "ocean",
        "piano", "queen", "river", "silver", "tiger"
    )
    # 随机选择单词
    $selectedWords = @()
    for ($i = 0; $i -lt $WordCount; $i++) {
        $index = Get-Random -Minimum 0 -Maximum $wordList.Count
        $word = $wordList[$index]
        if ($Capitalize) {
            $word = $word.Substring(0,1).ToUpper() + $word.Substring(1)
        }
        $selectedWords += $word
    }
    # 连接单词
    $passphrase = $selectedWords -join $Separator
    # 添加数字
    $numbers = Get-Random -Minimum 100 -Maximum 999
    $passphrase += $numbers.ToString()
    # 添加特殊字符
    $specialChars = "!@#$%^&*()_+-=[]{}|;:,.<>?"
    $specialIndex = Get-Random -Minimum 0 -Maximum $specialChars.Length
    $passphrase += $specialChars[$specialIndex]
    return $passphrase
}
# 使用示例
Write-Host "生成的密码短语: $(New-RandomPassphrase)"
Write-Host "自定义配置: $(New-RandomPassphrase -WordCount 5 -Separator "_" -Capitalize:$false)"

安全建议

  1. 使用密码学安全的随机数生成器(如 Python 的 secrets 模块,Node.js 的 crypto
  2. 定期更新密码短语
  3. 避免使用常见单词组合
  4. 密码短语长度建议:至少 4 个单词 + 数字 + 特殊字符
  5. 不同服务使用不同密码短语
  6. 考虑使用密码管理器存储

这些脚本可以根据需要调整单词列表、单词数量、分隔符和附加字符,对于生产环境,建议使用更长的单词列表并支持自定义字典文件。

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