本文目录导读:

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)"
安全建议
- 使用密码学安全的随机数生成器(如 Python 的
secrets模块,Node.js 的crypto) - 定期更新密码短语
- 避免使用常见单词组合
- 密码短语长度建议:至少 4 个单词 + 数字 + 特殊字符
- 不同服务使用不同密码短语
- 考虑使用密码管理器存储
这些脚本可以根据需要调整单词列表、单词数量、分隔符和附加字符,对于生产环境,建议使用更长的单词列表并支持自定义字典文件。